python - 有没有办法将 selenium 与 chrome 而不是 chromedriver 一起使用?
问题描述
我正在尝试自动化一个可以检测 chromedriver 的网站。我使用了一个用户代理,我已经进入并更改了 chromedriver 的 cdc_ 部分,以及其他一些东西。无论我做什么,它都会检测到 chromedriver 并且不会做任何事情。
但是,我已经能够使用 Subprocesses 并打开我的普通浏览器和 sendkeys 来访问网站,并做一些我需要的事情,所以我知道它可以在我的普通浏览器中工作。
有什么方法可以启动常规 chrome 并将 selenium 附加到它以自动执行任务?
解决方案
Chromedriver 驱动 chrome。这不是它自己的浏览器。
手动打开 chrome 并转到chrome://version/
然后打开您的网络驱动程序并转到相同的链接。您会看到 selenium 在新的/临时配置文件上启动 chrome 并启用更多参数。
只是这一行没有driver = webdriver.Chrome()
我的选项(在python中)启动带有一长串命令行参数的chrome:
由于硒的工作方式,您很可能会被检测到。
这是一篇很好的文章,详细介绍了问题和可能要尝试的事情:网站可以检测到您何时使用 selenium 和 chromedriver?
站点可以检测到 selenium 设置的一些变量。
@Erti-Chris Eelmaa 说得非常好:
selenium 检测的工作方式是它们测试使用 selenium 运行时出现的预定义 javascript 变量。bot 检测脚本通常在任何变量(在窗口对象上)中查找包含单词“selenium”/“webdriver”的任何内容,并且还记录名为 $cdc_ 和 $wdc_ 的变量。当然,所有这些都取决于您使用的浏览器。所有不同的浏览器都暴露了不同的东西。
您可以禁用 javascript,并通过实验标签禁用“--enable-automation”,但这可能会影响 selenium 的功能,并且您的脚本可能无法正常工作。
这可能不是您想听到的,但是当您处理这个(使用 selenium)时,请记住该站点旨在停止自动化,因此您正面临着一场艰苦的战斗。
推荐阅读
- ansible - 如何在 ansible hostvars 中使用 jinja2 循环索引?
- flutter - 在 Flutter 中访问嵌套 StreamBuilder 中的流
- python - 使用 xml 并导出节点名称
- amazon-web-services - 如何使用 Amazon SES API V2 获取 DKIM 和域验证码
- javascript - 您是否通过在 javascript 中使用定点数学来获得任何速度优势,以及如何获得?
- python - 按时期标记
- javascript - React Hooks - 在另一个函数中从 Promise 设置状态变量
- content-management-system - Sitefinity 从 8.2 升级到 12.2 - 构建成功,但是在运行项目时它卡在中间,似乎什么都没有发生
- html - 在移动设备中向上滚动时页面底部出现白色间隙
- ios - 如何在不使用 UIPickerView 的情况下在 tvOS 中实现下拉列表?