硒和无头的浏览器不断要求验证码



我遇到了一个问题,我们的一个网站一直在云中的浏览器中以无头模式要求验证码,所以我将其切换到非无头,因此我可以输入我自己,我以为下次它会起作用,也许是因为一些饼干已经存储了,但是即使我几次进入码头也没有。

还值得一提的是,它在任何模式下都可以在本地运行良好,并且在非自动化版本的云中也可以很好地运行,但是一旦我将其运行时,就以硒在任何模式下将其运行。验证码。任何想法可能正在发生的事情和解决方案的想法,都非常感谢

在题为" recaptcha 3"的讨论中,我已经讨论了一些通用方法,以避免在网络剪切时检测到某些通用方法。让我们深入研究。


无头浏览器

无头浏览器是可以在没有图形接口的情况下使用的浏览器。可以通过编程方式控制它以自动化任务,例如进行测试或进行网页屏幕截图。


为什么要检测到无头浏览器?

根据@antoinevastel,无头浏览器用于自动化恶意任务。最常见的情况是网络刮擦,增加广告印象或在网站上寻找漏洞。

直到一年前,最受欢迎的无头浏览器之一是Phantomjs。由于它是基于QT框架的,因此与大多数流行的浏览器相比,它具有许多差异。可以使用一些浏览器指纹技术检测幻象。自第59版以来,Google发布了其Chrome浏览器的无头版本。与Phantomjs不同,它基于香草铬,而不是基于外部框架,使其存在更难以检测。因此,可能还有其他方法可以检测到Chrome无头。


检测铬无头

  • 用户代理:用户代理属性通常用于检测OS以及用户的浏览器。使用Chrome版本59具有以下值:

    Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/59.0.3071.115 Safari/537.36
    
    • 可以通过:

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

    • 可以通过:

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

    • 可以通过:

      进行检查语言的存在
      if(navigator.languages == "") {
           console.log("Chrome headless detected");
      }
      
  • WebGl :WebGL是在HTML画布中执行3D渲染的API。使用此API,可以查询图形驱动程序的供应商以及图形驱动程序的渲染器。使用Vanilla 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 headless都将为供应商和渲染器具有相同的值。其他人则保留在非无头版本上也可以找到的值。但是, Mesa Offscreen Brian Paul 表示无头版本的存在。

  • 浏览器功能:ModernIzr库使浏览器中是否存在各种HTML和CSS功能。我们在Chrome和无头铬之间发现的唯一区别是,后者没有发际线特征,它检测了对 hidpi/retina hairlines 的支持。

    • 可以通过:

      来完成发际线特征的存在
      if(!Modernizr["hairline"]) {
          console.log("It may be Chrome headless");
      }
      
  • 缺少图像:我们列表上的最后一个似乎也是最坚固的,它来自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");
          }
      }
      

这些是为什么无头浏览器更容易被检测到的一些关键因素。


uno

  • 检测基于phantomjs的访客
  • 无法使用硒来自动追逐站点登录
  • Selenium Webdriver:修改Navigator.Webdriver Flag以防止硒检测

因此,根据您执行操作的速度,验证码的工作原理是如何触发的,它将触发一种标志,该标志将通知服务器您是您正在a(试图破解网页或B(自动化它。这几乎总是会产生验证码实例。迄今为止,没有办法处理验证码。如果这是您公司开发的环境,则可以要求开发人员在带有不同URL的登台环境中关闭Captcha。这是理想的情况,但是如果这是一个外部站点,那么您对此无能为力。

相关内容

  • 没有找到相关文章

最新更新