硒无法与修改后的chromedriver一起使用,以避免被检测

时间:2018-08-09 15:16:40

标签: python selenium selenium-webdriver selenium-chromedriver

我之所以问这个问题是因为我知道this threadthis 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文件中的变量。

1 个答案:

答案 0 :(得分:0)

除非您要构造具有某些功能的单个chrome,否则无需再次重新编译它。尝试将“ $ cdc_asdjflasutopfhvcZLmcfl_”更改为“ $ abc_asdjflasutopfhvcZLmcfl_”。切记不要注意此行或将其更改为其他具有不同长度的变量名。由于编译文件对此很敏感,因此可能导致运行错误。