Gru*_*oof 8 python selenium selenium-chromedriver selenium-webdriver
我问这个是因为我知道这个线程和这个线程,以及其他关于同一主题的线程,但是每个人在第一个线程中转发的解决方案不再有效。所以请不要将其标记为关闭,因为第一个线程存在。答案是从 2016 年开始的,您可以看到更多最近出现问题的评论。
我正在使用 Selenium 进行一些轻微的网络抓取。我正在与之交互的一个站点清楚地检测到我的浏览器是自动化的(但奇怪的是,只要我还访问我所在地区以外的站点版本,我就在乎,但这既不存在也不存在)。
第一个线程中的解决方案建议使用从此处下载的 chromedriver并对其进行修改。它说要摆脱对其中带有“$cdc$ 的变量的提及。所以我执行以下操作。从该站点下载 v2.41,解压缩它。此版本允许我通过 将 Chrome 与 Selenium 一起使用br = webdriver.Chrome('./chromedriver'),但存在自动化检测问题. 所以,我cp这个来做chromedriver-modified。
在 chromedriver-modified 中,我用 vim 打开它并搜索 $cdc。我在 1934 年左右的链接线程中找到了一个类似(但略有不同)的函数:
function getPageCache(opt_doc, opt_w3c) {
var doc = opt_doc || document;
var w3c = opt_w3c || false;
// var key = '$cdc_asdjflasutopfhvcZLmcfl_';
var key = 'xxxx_asdjflasutopfhvcZLmcfl_';
// var key = 'randomblahhh_';
if (w3c) {
if (!(key in doc))
doc[key] = new CacheWithUUID();
return doc[key];
} else {
if (!(key in doc))
doc[key] = new Cache();
return doc[key];
}
}
Run Code Online (Sandbox Code Playgroud)
我试过用一些随机的东西(randomblahhh_var)和一些只替换前 4 个字符的东西来替换这个变量$cdc,因为我在那个线程的评论中看到了这两个建议(我不知道是否有某种格式变量在这里很重要。
两者都不起作用。我的意思是,当我尝试使用 运行它时chromedriver-modified,webdriver 甚至不会启动:
>>> from selenium import webdriver
>>> br = webdriver.Chrome(executable_path='./chromedriver-modified')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3/dist-packages/selenium/webdriver/chrome/webdriver.py", line 68, in __init__
self.service.start()
File "/usr/lib/python3/dist-packages/selenium/webdriver/common/service.py", line 96, in start
self.assert_process_still_running()
File "/usr/lib/python3/dist-packages/selenium/webdriver/common/service.py", line 109, in assert_process_still_running
% (self.path, return_code)
selenium.common.exceptions.WebDriverException: Message: Service ./chromedriver-modified unexpectedly exited. Status code was: -11
Run Code Online (Sandbox Code Playgroud)
我在谷歌搜索和弄清楚这个状态代码的含义时遇到了麻烦。事实上,我发现这个未答复的 reddit 帖子有同样的问题。
第一个线程也提到了 $wdc 变量,但我发现在 chromedriver 中没有提到它们。
也只是为了抢占可能的建议:我几乎 100% 确信它检测到我正在使用自动浏览器,因为它是自动的,而不是因为鼠标点击速度或任何其他东西。如果我用 selenium 启动浏览器,然后手动完成其余的工作,它仍然会导致问题。
编辑:我正在使用来自 Ubuntu 存储库 google-chrome-stable 的 Chrome v68。老实说,我不需要专门使用 Chrome,但我发现的答案似乎围绕它而不是 Firefox。
编辑2:最后一条评论——我在第一个链接线程中注意到有些人正在“重新编译”:
对我来说,我使用了 chrome,所以,我所要做的就是确保 $cdc_ 不再作为文档变量存在,瞧(下载 chromedriver 源代码,修改 chromedriver 并以不同的名称重新编译 $cdc_。 )
我不确定这意味着什么——他们是在重新编译 Chrome 本身吗?我所做的就是更改 chromedriver 文件中的变量。
小智 2
除非你想构建具有某些功能的单独的chrome,否则没有必要再次重新编译它。尝试将其更改$cdc_asdjflasutopfhvcZLmcfl_为$abc_asdjflasutopfhvcZLmcfl_.
记住不要记下这一行或将其更改为其他长度不同的变量名。由于编译后的文件对此敏感,可能会导致运行错误。
| 归档时间: |
|
| 查看次数: |
4546 次 |
| 最近记录: |