如何开发无法被网站检测的Python+Selenium Web爬虫?
如何避免Selenium爬虫被Chrome识别为机器人?
以下是几个实用的优化方向,帮你让爬虫更接近真实用户行为:
禁用Selenium特征标识
Chrome会通过navigator.webdriver等属性识别自动化工具,你可以通过JS脚本修改这些标识:driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})")同时启动Chrome时添加参数,屏蔽自动化控制特征:
from selenium.webdriver.chrome.options import Options options = Options() options.add_argument("--disable-blink-features=AutomationControlled") driver = webdriver.Chrome(options=options)模拟真实用户操作习惯
- 不要用固定间隔的延迟,改用随机时长等待:
import time import random time.sleep(random.uniform(1.5, 3.5)) - 模拟鼠标随机移动、页面滚动,避免机械性操作:
from selenium.webdriver.common.action_chains import ActionChains # 随机移动鼠标到页面任意位置 body = driver.find_element(By.TAG_NAME, 'body') actions = ActionChains(driver) actions.move_to_element_with_offset(body, random.randint(0, 200), random.randint(0, 200)).perform() # 随机滚动页面 driver.execute_script(f"window.scrollTo(0, {random.randint(100, 800)})")
- 不要用固定间隔的延迟,改用随机时长等待:
配置真实浏览器环境
- 使用本地Chrome的用户配置文件启动,让爬虫复用你的真实浏览器缓存、Cookie:
options.add_argument(r"user-data-dir=C:\Users\你的用户名\AppData\Local\Google\Chrome\User Data") - 设置真实的User-Agent,直接复制你当前Chrome的UA值(在浏览器控制台输入
navigator.userAgent获取),避免使用Selenium默认UA。
- 使用本地Chrome的用户配置文件启动,让爬虫复用你的真实浏览器缓存、Cookie:
控制请求频率与轮换资源
- 不要短时间内批量请求同一页面,严格控制访问间隔;
- 搭配代理池轮换IP,避免单一IP被高频访问触发拦截;
- 定期清理或轮换Cookie,模拟不同用户的访问轨迹。
使用针对性工具(可选)
如果以上方法效果有限,可以试试undetected-chromedriver库,它专门针对反爬机制做了优化,能自动隐藏Selenium的各种特征;或者换用Playwright,它对浏览器的模拟更贴近真实用户,默认配置下被检测的概率更低。
内容的提问来源于stack exchange,提问作者blindProgrammer
相关产品推荐
相关产品推荐

