是否有无法检测到的硒版本?硒真的检测不到吗?

时间:2019-06-10 14:46:45

标签: selenium selenium-webdriver webdriver selenium-chromedriver

我正在ubuntu服务器上的硒上运行chrome驱动程序。在住宅代理网络背后。但是我的硒被查出了。有没有办法使铬驱动剂和硒100%无法检测到?

我已经尝试了很久了,所以我忘记了我所做的许多事情,包括 1)尝试使用不同版本的Chrome 2)添加几个标志并从chrome驱动程序文件中删除一些单词。 3)将其破坏在代理之后。住宅的也。 使用隐身模式。 4)加载配置文件。 5)鼠标移动随机。 6)随机化所有内容

我正在寻找100%无法检测到的硒的真实版本。 (如果存在的话)或机器人跟踪程序无法检测到的另一种自动化方式。

这是浏览器启动的一部分

sx = random.randint(1000,1500)
sn = random.randint(3000,4500)

display = Display(visible=0, size=(sx,sn))
display.start()


    randagent =  random.randint(0,len(useragents_desktop)-1)

    uag = useragents_desktop[randagent]
    #this is to prevent ip leaking
    preferences = 
"webrtc.ip_handling_policy" : "disable_non_proxied_udp",
"webrtc.multiple_routes_enabled": False,
"webrtc.nonproxied_udp_enabled" : False

    chrome_options.add_experimental_option("prefs", preferences)
    chrome_options.add_argument("--disable-dev-shm-usage")
    chrome_options.add_argument("--no-sandbox")
    chrome_options.add_argument("--disable-impl-side-painting")
    chrome_options.add_argument("--disable-setuid-sandbox")
    chrome_options.add_argument("--disable-seccomp-filter-sandbox")
    chrome_options.add_argument("--disable-breakpad")
    chrome_options.add_argument("--disable-client-side-phishing-detection")
    chrome_options.add_argument("--disable-cast")
    chrome_options.add_argument("--disable-cast-streaming-hw-encoding")
    chrome_options.add_argument("--disable-cloud-import")
    chrome_options.add_argument("--disable-popup-blocking")
    chrome_options.add_argument("--ignore-certificate-errors")
    chrome_options.add_argument("--disable-session-crashed-bubble")
    chrome_options.add_argument("--disable-ipv6")
    chrome_options.add_argument("--allow-http-screen-capture")
    chrome_options.add_argument("--start-maximized")
    wsize = "--window-size=" +  str(sx-10) + ',' + str(sn-10)
    chrome_options.add_argument(str(wsize) )

    prefs = {"profile.managed_default_content_settings.images": 2}
    chrome_options.add_experimental_option("prefs", prefs)

    chrome_options.add_argument("blink-settings=imagesEnabled=true")
    chrome_options.add_argument("start-maximized")
    chrome_options.add_argument("user-agent="+uag)
    chrome_options.add_extension(pluginfile)#this is for the residential proxy
    driver = webdriver.Chrome(executable_path="/usr/bin/chromedriver", chrome_options=chrome_options)

2 个答案:

答案 0 :(得分:2)

检测到的事实并不取决于任何特定的 Chrome ChromeDriver 版。 网站本身可以检测网络流量,并且可以将浏览器客户端 Web浏览器标识为 WebDriver控制的。 / p>

但是,一些避免在网络抓取过程中被检测到的通用方法如下:

@Antoine Vastel在他的博客网站Detecting Chrome Headless中提到了几种方法,它们将 Chrome 浏览器与 headless Chrome 浏览器区分开来

  • 用户代理:用户代理属性通常用于检测操作系统以及用户的浏览器。在Chrome版本59中,它具有以下值:

    Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/59.0.3071.115 Safari/537.36
    
    • 可以通过以下方法检查 Chrome无头的存在:

      if (/HeadlessChrome/.test(window.navigator.userAgent)) {
          console.log("Chrome headless detected");
      }
      
  • 插件 navigator.plugins 返回浏览器中存在的一系列插件。通常,在Chrome上我们会找到默认插件,例如Chrome PDF viewerGoogle Native Client。相反,在无头模式下,返回的数组包含插件。

    • 可以通过以下方法检查插件的存在:

      if(navigator.plugins.length == 0) {
          console.log("It may be Chrome headless");
      }
      
  • 语言:在Chrome中,两个Javascript属性可用于获取 user: navigator.language navigator.languages 使用的语言。第一个是浏览器用户界面的语言,第二个是代表用户首选语言的字符串数组。但是,在无头模式下, navigator.languages 返回一个字符串。

    • 可以通过以下方法检查是否存在语言

      if(navigator.languages == "") {
           console.log("Chrome headless detected");
      }
      
  • WebGL :WebGL是用于在HTML画布中执行3D渲染的API。使用此API,可以查询图形驱动程序的供应商以及图形驱动程序的渲染器。使用普通的Chrome和Linux,我们可以为渲染器和供应商获得以下值: Google SwiftShader Google Inc. 。在无头模式下,我们可以获得 Mesa OffScreen (这是一种无需使用任何窗口系统即可进行渲染的技术)和 Brian Paul 启动开源Mesa图形库的程序。

    • 可以通过以下方法检查 WebGL 的存在:

      var canvas = document.createElement('canvas');
      var gl = canvas.getContext('webgl');
      
      var debugInfo = gl.getExtension('WEBGL_debug_renderer_info');
      var vendor = gl.getParameter(debugInfo.UNMASKED_VENDOR_WEBGL);
      var renderer = gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL);
      
      if(vendor == "Brian Paul" && renderer == "Mesa OffScreen") {
          console.log("Chrome headless detected");
      }
      
    • 并非所有的无头Chrome都具有相同的供应商和渲染器值。其他人保留的值也可以在非无头版本中找到。但是, Mesa Offscreen Brian Paul 表示存在无头版本。

  • 浏览器功能:Modernizr库可以测试浏览器中是否存在各种HTML和CSS功能。我们发现Chrome和无头Chrome之间的唯一区别是后者没有发际线功能,该功能检测到对 hidpi/retina hairlines 的支持。

    • 可以通过以下方法检查发际线特征的存在:

      if(!Modernizr["hairline"]) {
          console.log("It may be Chrome headless");
      }
      
  • 缺少图像:我们列表中的最后一个似乎也最可靠,它来自于Chrome无法使用的图像尺寸。在使用普通Chrome浏览器的情况下,图像的宽度和高度取决于浏览器的缩放比例,但不等于零。在无头Chrome中,图片的宽度和高度等于零。

    • 可以通过以下方法检查是否存在缺少图像

      var body = document.getElementsByTagName("body")[0];
      var image = document.createElement("img");
      image.src = "http://iloveponeydotcom32188.jg";
      image.setAttribute("id", "fakeimage");
      body.appendChild(image);
      image.onerror = function(){
          if(image.width == 0 && image.height == 0) {
          console.log("Chrome headless detected");
          }
      }   
      

参考

您可以在以下位置找到一些类似的讨论:

答案 1 :(得分:1)

为什么不试试undetected-chromedriver

优化 Selenium Chromedriver 补丁,不会触发 Distill Network / Imperva / DataDome / Botprotect.io 等反僵尸服务自动下载驱动程序二进制文件并打补丁。

一直测试到当前的 chrome beta 版本 也适用于 Brave Browser 和许多其他基于 Chromium 的浏览器 Python 3.6++

您可以使用以下命令安装它:pip install undetected-chromedriver

您应该注意以下重要事项: 由于模块的内部工作原理,需要以编程方式浏览(即:使用 .get(url) )。切勿使用 gui 进行导航。使用键盘和鼠标进行导航可能会被检测到!新标签:同样的故事。如果你真的需要多标签,那么打开空白页的标签(提示:url是数据:,包括逗号,是的,驱动程序接受它)并像往常一样做你的事情。如果您遵循这些“规则”(实际上是它的默认行为),那么您现在会玩得很开心。

In [1]: import undetected_chromedriver as uc
In [2]: driver = uc.Chrome()
In [3]: driver.execute_script('return navigator.webdriver')
Out[3]: True  # Detectable
In [4]: driver.get('https://distilnetworks.com') # starts magic
In [4]: driver.execute_script('return navigator.webdriver')
In [5]: None  # Undetectable!