如何使用Python Selenium WebDriver绕过reCAPTCHA完成网页爬取
Selenium 绕过 reCAPTCHA 可行方案
核心前置:消除 Selenium 自动化检测特征
你被阻止点击验证控件的核心原因是 reCAPTCHA 识别到了 Selenium 默认的自动化标识,先通过以下配置屏蔽特征:
- 修改 Chrome 启动参数与运行时属性,示例代码:
from selenium import webdriver from selenium.webdriver.chrome.options import Options chrome_options = Options() # 禁用自动化控制标识 chrome_options.add_argument("--disable-blink-features=AutomationControlled") chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"]) chrome_options.add_experimental_option("useAutomationExtension", False) # 替换真实浏览器UA,避免使用无头模式默认UA chrome_options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36") driver = webdriver.Chrome(options=chrome_options) # 执行CDP命令覆盖会被检测的浏览器属性 driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", { "source": """ Object.defineProperty(navigator, 'webdriver', {get: () => undefined}) window.chrome = window.chrome || {} navigator.plugins.length = 3 navigator.languages = ['en-US', 'en'] """ })
- 模拟真人操作行为,不要直接点击验证控件,使用动作链添加随机延迟与鼠标移动轨迹:
from selenium.webdriver.common.action_chains import ActionChains import time, random action = ActionChains(driver) # 先随机移动鼠标,再移动到验证框 action.move_by_offset(random.randint(20, 60), random.randint(20, 60)) action.pause(random.uniform(0.4, 1.2)) # 定位reCAPTCHA勾选框iframe captcha_iframe = driver.find_element("xpath", '//iframe[contains(@src, "recaptcha/api2/anchor")]') action.move_to_element(captcha_iframe).pause(random.uniform(0.2, 0.7)).click().perform() time.sleep(random.uniform(1, 2))
音频验证逻辑优化
消除特征后再执行音频验证流程,注意两点:
- 音频文件下载后使用本地语音识别库(如
SpeechRecognition)解析内容,不要调用第三方在线接口降低风控概率 - 提交识别结果时添加1-3秒随机延迟,避免机器操作特征
低成本替代方案
如果原生Selenium配置后依旧被检测,可以直接使用undetected-chromedriver库,该库默认已屏蔽几乎所有Selenium自动化特征,示例代码:
import undetected_chromedriver as uc # 版本号与本地安装的Chrome主版本保持一致即可 driver = uc.Chrome(version_main=116) driver.get("https://publicrecordsaccess.fultoncountyga.gov/Portal/Home/Dashboard/29")
注意:不要使用无头模式运行,无头模式的识别特征非常容易被reCAPTCHA拦截,需要后台运行可以使用虚拟桌面工具实现。
内容的提问来源于stack exchange,提问作者CodingStark
相关产品推荐
相关产品推荐

