使用Python的Selenium Chrome Driver时如何避开验证页面?
绕过Selenium爬取时的人机验证方案
你遇到的这类人机验证是网站常见的反爬机制,针对Selenium的特征检测拦截自动化请求,以下是几种实用的解决方法:
1. 优化浏览器配置,模拟真实用户行为
你的现有配置里包含--disable-web-security这类会暴露异常状态的参数,建议替换为更贴近真实浏览器的配置,避免被网站检测出是自动化工具:
from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager import time options = Options() # 模拟真实浏览器UA,可替换成你当前使用的浏览器UA options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36") # 禁用自动化特征检测 options.add_argument("--disable-blink-features=AutomationControlled") # 禁用扩展,避免异常 options.add_argument("--disable-extensions") # 设置语言为中文 options.add_argument("--lang=zh-CN") # 最大化窗口 options.add_argument("start-maximized") # 禁用图片加载(可选,提升爬取速度) options.add_argument("--blink-settings=imagesEnabled=false") driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options) # 模拟人类延迟,避免快速请求 time.sleep(2) driver.get('THE_WEBSITE_COM')
2. 使用undetected-chromedriver库
这个库专门针对Selenium的检测机制做了优化,能有效绕过大部分网站的人机验证:
首先安装库:
pip install undetected-chromedriver
替换后的代码:
import undetected_chromedriver as uc import time driver = uc.Chrome() driver.maximize_window() time.sleep(2) driver.get('THE_WEBSITE_COM')
这个库会自动处理浏览器的自动化特征隐藏,无需额外配置,对大部分反爬验证效果很好。
3. 临时手动验证(适合低频率场景)
如果验证触发不频繁,可以让程序暂停,手动完成验证后继续:
from selenium import webdriver # 配置同上... driver.get('THE_WEBSITE_COM') # 等待手动完成验证 input("完成页面上的人机验证后,按回车键继续爬取...") # 后续爬取逻辑
4. 控制请求频率与模拟人类操作
网站会通过请求间隔、操作轨迹判断是否为爬虫,建议:
- 每次请求或操作后添加随机延迟:
time.sleep(random.uniform(2, 5)) - 模拟鼠标滚动、点击等行为,比如用
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")模拟滚动 - 避免短时间内大量重复请求
5. 使用代理IP分散请求来源
如果是因为IP访问频率过高触发验证,可以使用代理IP切换请求来源,配置示例:
options = Options() # 添加代理,替换成你的代理地址 options.add_argument("--proxy-server=http://your-proxy-ip:port")
内容的提问来源于stack exchange,提问作者Alan CUZON
相关产品推荐
相关产品推荐

