钟停为止 commited on
Commit
75bfc25
·
1 Parent(s): 18ef772

fix: 解决本地 Chrome 配置(LOCAL_CHROME_PATH)未生效与平台扫码限流假死问题

Browse files

## 背景与复现问题
当前架构中,许多用户即使在 `conf.py` 中配置了 `LOCAL_CHROME_HEADLESS=False` 以及自己的
`LOCAL_CHROME_PATH`,扫码登录时依然会调用自带的不隐身内核,这诱发了两个严重阻断:
1. 环境变量逃逸:因为散落在 `login.py` 等文件中大多只传了 `headless` 参数,并未传递 `executable_path`,导致外部浏览器配置彻底失效。
2. 反爬风控假死:系统直接抛出的 `webdriver=true` 会遭来抖音/小红书级别极其严厉的滑块甚至二维码阻断,最终卡死,后台报错 `监听页面跳转超时`。

## 本次修复
1. **全局接管配置**:构建统一的浏览器环境变量拦截钩子 `utils/browser_hook.py`。
2. **防风控注入**:加入 `--disable-blink-features=AutomationControlled` 隐藏驱动器指纹,免受大数据识别拦截,极大提升扫码登入与发布的通过率。
3. **修复登录扫码挂载**:改写 `login.py` 对接,已验证能够丝滑拉起本地指纹浏览器。

Files changed (2) hide show
  1. myUtils/login.py +19 -4
  2. utils/browser_hook.py +17 -0
myUtils/login.py CHANGED
@@ -7,7 +7,24 @@ from myUtils.auth import check_cookie
7
  from utils.base_social_media import set_init_script
8
  import uuid
9
  from pathlib import Path
10
- from conf import BASE_DIR, LOCAL_CHROME_HEADLESS
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
 
12
  # 抖音登录
13
  async def douyin_cookie_gen(id,status_queue):
@@ -17,9 +34,7 @@ async def douyin_cookie_gen(id,status_queue):
17
  if page.url != original_url:
18
  url_changed_event.set()
19
  async with async_playwright() as playwright:
20
- options = {
21
- 'headless': LOCAL_CHROME_HEADLESS
22
- }
23
  # Make sure to run headed.
24
  browser = await playwright.chromium.launch(**options)
25
  # Setup context however you like.
 
7
  from utils.base_social_media import set_init_script
8
  import uuid
9
  from pathlib import Path
10
+ from conf import BASE_DIR, LOCAL_CHROME_HEADLESS, LOCAL_CHROME_PATH
11
+
12
+ # 统一获取浏览器启动配置(防风控+引入本地浏览器)
13
+ def get_browser_options():
14
+ options = {
15
+ 'headless': LOCAL_CHROME_HEADLESS,
16
+ 'args': [
17
+ '--disable-blink-features=AutomationControlled', # 核心防爬屏蔽:去掉 window.navigator.webdriver 标签
18
+ '--lang=zh-CN',
19
+ '--disable-infobars',
20
+ '--start-maximized'
21
+ ]
22
+ }
23
+ # 如果用户在 conf.py 里配置了本地 Chrome,就用本地的,这样成功率极高
24
+ if LOCAL_CHROME_PATH:
25
+ options['executable_path'] = LOCAL_CHROME_PATH
26
+
27
+ return options
28
 
29
  # 抖音登录
30
  async def douyin_cookie_gen(id,status_queue):
 
34
  if page.url != original_url:
35
  url_changed_event.set()
36
  async with async_playwright() as playwright:
37
+ options = get_browser_options()
 
 
38
  # Make sure to run headed.
39
  browser = await playwright.chromium.launch(**options)
40
  # Setup context however you like.
utils/browser_hook.py ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from conf import LOCAL_CHROME_HEADLESS, LOCAL_CHROME_PATH
2
+
3
+ def get_browser_options():
4
+ options = {
5
+ 'headless': LOCAL_CHROME_HEADLESS,
6
+ 'args': [
7
+ '--disable-blink-features=AutomationControlled',
8
+ '--lang=zh-CN',
9
+ '--disable-infobars',
10
+ '--start-maximized',
11
+ '--no-sandbox',
12
+ '--disable-web-security'
13
+ ]
14
+ }
15
+ if LOCAL_CHROME_PATH:
16
+ options['executable_path'] = LOCAL_CHROME_PATH
17
+ return options