如何使用Python Selenium绕过Chegg网站的点击按住式验证码
解决方案
你遇到的是PerimeterX推出的点击按住类人机验证,当前代码的问题主要是浏览器特征被识别、动作链行为不符合真人操作逻辑,按以下方式修改即可:
- 修正浏览器启动参数
你现有配置存在冲突:同时配置了默认用户目录和无痕模式,两项互斥会导致浏览器指纹异常,更容易被识别;同时缺少反自动化特征屏蔽配置,修改后启动参数参考:
# --incognito 和 --profile-directory=Default 二选一,建议保留本地用户目录配置,删除无痕参数 option.add_argument('--profile-directory=Default') option.add_argument("--disable-plugins-discovery") option.add_argument("--start-maximized") option.add_argument('--ignore-certificate-errors') option.add_argument('--allow-running-insecure-content') option.add_argument("--disable-extensions") option.add_argument("--proxy-server=direct://") option.add_argument("--proxy-bypass-list=*") option.add_argument('--disable-dev-shm-usage') option.add_argument('--no-sandbox') # 新增反检测配置 option.add_argument("--disable-blink-features=AutomationControlled") option.add_experimental_option("excludeSwitches", ["enable-automation"]) option.add_experimental_option('useAutomationExtension', False)
浏览器启动后立即执行指纹擦除脚本:
browser.execute_script(""" Object.defineProperty(navigator, 'webdriver', {get: () => undefined}); Object.defineProperty(navigator, 'plugins', {get: () => [1, 2, 3, 4, 5]}); Object.defineProperty(navigator, 'languages', {get: () => ['zh-CN', 'zh', 'en']}); """)
- 优化验证动作链逻辑
你原来的写法是主线程sleep,动作链按下事件触发后主线程阻塞,14秒后才执行释放,期间没有任何鼠标行为,会被验证系统直接判定为机器人。要将等待和微小的鼠标偏移动作写入动作链,模拟真人按住时的微小抖动,参考代码:
from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.common.by import By import time # 页面加载完成后先等待2秒,模拟用户浏览停顿 time.sleep(2) # 定位验证码元素 element = browser.find_element(By.CSS_SELECTOR, '#px-captcha') action = ActionChains(browser, duration=50) # 移动到验证码元素的非中心位置 action.move_to_element_with_offset(element, 6, 7) # 按下左键 action.click_and_hold() # 分阶段加入微小偏移和停顿,总按住时长控制在10-15秒之间即可 action.move_by_offset(2, 0).pause(2) action.move_by_offset(0, 2).pause(3) action.move_by_offset(-1, 1).pause(3) action.move_by_offset(-1, -3).pause(4) # 松开左键 action.release() # 执行完整动作链 action.perform()
- 额外说明
如果反复验证失败,可以切换代理IP,PerimeterX会对短时间内多次验证失败的IP做标记,切换IP后重试通过率更高。
内容的提问来源于stack exchange,提问作者Jonathan Kho
相关产品推荐
相关产品推荐

