我之所以问这个问题是因为我知道this thread和this thread,其他人都知道同一主题,但是每个人在第一个线程中转发的解决方案都不再起作用。因此,请勿将其标记为已关闭,因为存在第一个线程。答案是从2016年开始的,您会发现最近的评论有麻烦。
我正在使用Selenium刮擦薄纸。我正在与之交互的一个站点清楚地检测到我的浏览器是自动化的(但是奇怪的是,只要我还访问了我所在区域之外的该站点的某个版本,就不在乎了,
第一个线程中的解决方案建议采用chromedriver下载的from here并进行修改。它说的是要摆脱对带有“ $ cdc $”的变量的提及。因此,我执行以下操作。从该站点下载v2.41,解压缩。此版本允许我通过br = webdriver.Chrome('./chromedriver')
将Chrome与Selenium一起使用,但是遇到了自动化检测问题。因此,我cp
进行了chromedriver修改。
在chromedriver修改版中,我用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];
}
}
我尝试使用随机变量(randomblahhh_
变量)和仅替换$cdc
变量的前4个字符的变量来替换此变量,因为我在注释中看到了两个建议该线程(我不知道该变量的某种格式在这里是否重要。
均无效。我的意思是,当我尝试使用chromedriver-modified
运行它时,网络驱动程序甚至无法启动:
>>> 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
我在Google搜索和弄清楚此状态码的含义时遇到了麻烦。实际上,我发现this unanswered reddit thread存在相同的确切问题。
第一个线程还提到$ wdc变量,但是我在chromedriver中没有提到它们。
也只是抢占了可能的建议:我几乎100%确信它检测到我正在使用自动浏览器,因为它是自动的,而不是是由于鼠标单击速度或任何东西。如果我使用硒启动浏览器,然后手动执行其余操作,仍然会导致问题。
edit:我正在使用来自Ubuntu仓库google-chrome-stable的Chrome v68。老实说,我不需要专门使用Chrome,但是我发现的答案似乎集中在Chrome而非Firefox上。
edit2:最后一条评论-我在第一个链接的线程中注意到有人在“重新编译”:
对我来说,我使用的是chrome,因此,我要做的就是确保 $ cdc_作为文档变量不再存在,瞧(下载 chromedriver源代码,修改chromedriver并重新编译$ cdc_ 用不同的名字。)
我不确定这是什么意思-他们在重新编译Chrome本身吗?我要做的就是更改chromedriver文件中的变量。
答案 0 :(得分:0)
除非您要构造具有某些功能的单个chrome,否则无需再次重新编译它。尝试将“ $ cdc_asdjflasutopfhvcZLmcfl_”更改为“ $ abc_asdjflasutopfhvcZLmcfl_”。切记不要注意此行或将其更改为其他具有不同长度的变量名。由于编译文件对此很敏感,因此可能导致运行错误。