You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

网站检测Selenium/ChromeDriver远程控制的原理及Discover爬取报错求助

搞定Discover网站的Selenium检测问题,附检测机制拆解

嘿,你遇到的这个情况太典型了——默认配置的Selenium/ChromeDriver一跑就被拦,但手动开浏览器输账号(哪怕是随机的)却没事,核心就是Selenium会给浏览器打上“自动化工具”的特殊标记,而手动操作的浏览器完全是原生状态,没这些破绽。

先说说Discover是怎么认出你用了Selenium的

主流金融类网站(比如Discover)的反爬系统都会盯着这些点:

  • 特殊JS属性暴露:Selenium默认会给Chrome注入window.navigator.webdriver属性,值为true,网站只需要一行JS就能读到这个标记;另外chrome://version里的命令行参数会带--enable-automation--remote-debugging-port这类自动化相关的内容,也是明显的破绽。
  • 行为模式太“机械”:爬虫的操作太规整了——点击间隔丝毫不差、输入速度匀速、没有人类会有的停顿或误操作,甚至滚动页面的节奏都一模一样,反爬系统通过行为分析一眼就能看出来。
  • 会话状态异常:Selenium默认启动的是全新的浏览器会话,没有之前访问留下的Cookie、本地存储数据,而正常用户的浏览器会有这些“历史痕迹”,空会话很容易被判定为可疑。
  • UA或环境不匹配:哪怕你设置了正确的User-Agent,默认Selenium的环境里可能还有其他和真人浏览器不一致的地方,比如屏幕分辨率、插件列表等,这些细节也会被检测。

为啥手动开有头浏览器就没事?

因为手动操作的浏览器是完全“干净”的:

  • 没有Selenium注入的那些特殊属性,window.navigator.webdriver返回的是undefined,和正常用户的浏览器一模一样;
  • 你的操作是随机的——比如输入时会停顿、不小心打错字再删掉、滚动页面时快慢不一,这些人类特有的行为模式,反爬系统会判定为正常访问;
  • 如果之前访问过Discover,浏览器里还存着合法的Cookie和缓存,网站会认为这是回头客,自然不会拦你。

给你几个实用的规避思路(仅供参考)

如果想让Selenium绕过这类检测,可以试试这些配置:

  • 屏蔽自动化标记:启动Chrome时添加--disable-blink-features=AutomationControlled参数,这样window.navigator.webdriver就会变成undefined;也可以用JS注入的方式覆盖这个属性。
  • 清理命令行痕迹:在ChromeOptions里移除--enable-automation这类暴露自动化的参数,避免网站从命令行信息里识别。
  • 模拟人类行为:用time.sleep(random.uniform(0.5, 2))添加随机停顿,用ActionChains模拟鼠标移动、悬停、滚动等自然操作,别让操作太机械。
  • 复用手动浏览器会话:先手动打开Chrome,开启远程调试模式(比如加--remote-debugging-port=9222参数),然后让Selenium连接到这个会话,这样就能继承手动浏览器的Cookie和状态,和真人访问几乎没区别。
  • 优化无头模式:如果要用无头模式,别用旧的--headless,改用--headless=new(新版Chrome的无头模式更接近有头浏览器的行为),同时设置和真人浏览器一致的UA。

内容的提问来源于stack exchange,提问作者Harold

火山引擎 最新活动