python - 网站正在检测 SELENIUM。这怎么可能?
问题描述
所以你可以去这个聊天网站,点击“以访客身份连接”,输入你的用户名,完成一个 ReCaptcha v2,点击“连接”,你就进去了。
如果我在浏览器中执行此操作,它可以正常工作。如果我在 selenium 控制的 chromedriver 浏览器中执行此操作,则会出现错误。(错误是“请输入验证码”,但这无关紧要。服务器明显检测到我,因为服务器有特殊响应,触发此错误)
重要提示:在这两种情况下(我的浏览器和 chromedriver 浏览器),我都是 100% 手动完成的!我只是使用 selenium 启动浏览器,然后从那里继续。我什至尝试向 chromedriver 浏览器添加一个选项以使用我的实际浏览器设置。它加载了我的历史记录、cookies 和所有内容。但是当我尝试进入聊天室时,我得到了错误。
我还在网上查看,发现有些人声称网站可以通过注意到一些特定的 javascript 变量“cdc_”来检测硒。我已经编辑了chromedriver的十六进制代码,按照网上的说明更改了变量,再次尝试,同样的结果。我花了几个小时试图解决这个问题......
有一件有趣的事情可以帮助找到问题:如果我打开浏览器并尝试使用我的配置文件运行带有 chromedriver 的 python 脚本,chromedriver 浏览器将启动,python 代码将返回一个错误,说明配置文件是已在使用中(但浏览器将保持打开状态)。现在,如果我尝试使用这个 chromedriver 浏览器访问聊天室,它可以工作。
编辑:我已经通过 Fiddler 查看了这两种情况的请求,并且标头是 100% 相同的!我的意思是100%!甚至 sessionid、PHPSESSID 和 cfuid 也是相同的,因为它使用相同的配置文件。
唯一改变的是发布请求数据。更具体地说,验证码响应(因为它是不同的)和另一个变量 s。这个变量 s 是使用一个叫做 challenge 的奇怪的 javascript 文件以某种方式计算出来的。我不确定它可以做什么或它是如何工作的。
编辑:解决 了我通过添加一个选项来解决这个问题:
options.add_argument("--disable-blink-features=AutomationControlled");
解决方案
推荐阅读
- apache - Flask SocketIO + Apache
- typescript - 关于在类构造函数中有一个带有默认道具的参数对象的打字稿菜鸟问题
- java - 使用 Selenium 的下拉列表出现问题
- c# - 将 SkillCoolDown 值作为唯一参数传递给方法
- node.js - Nodejs/Express - 如何通过 Mongoose 模式访问 Mongodb
- java - 如何等待主线程直到异步方法完成?
- powershell - 使用 Get-Variable 返回的变量
- marklogic - 计划任务的时间限制是多少?
- javascript - 使用 HTML5 画布上下文作为原型
- webpack - Webpack 配置:没有 dist 文件夹,'cannot GET /' 错误