CCC*_*CCC 2 selenium captcha webdriver selenium-webdriver webdriver-w3c-spec
我遇到了一个问题,我们的一个网站一直在云中的浏览器中以无头模式要求验证码,所以我将其切换为非无头模式,这样我就可以自己输入验证码,我想下次它会工作,也许是因为一些 cookie 已经被存储了,但即使我输入了几次验证码,它也没有存储。
另外值得一提的是,它在任何模式下都可以在本地运行良好,并且对于非自动化版本,它在云中也运行良好,但是一旦我在任何模式下使用 Selenium 运行它,它就会不断要求验证码。非常感谢任何可能发生的事情和解决方案的想法
在标题为“recaptcha 3 如何知道我正在使用 selenium/chromedriver”的讨论中,我们讨论了一些避免在网页抓取时被检测到的通用方法。让我们深入探讨一下。
\n\n无头浏览器是一种无需图形界面即可使用的浏览器。它可以通过编程方式控制以自动执行任务,例如进行测试或截取网页屏幕截图。
\n\n根据@AntoineVastel,无头浏览器用于自动执行恶意任务。最常见的情况是网络抓取、增加广告印象或寻找网站上的漏洞。
\n\n直到一年前,最流行的无头浏览器之一是 PhantomJS。由于它是基于 Qt 框架构建的,因此与大多数流行的浏览器相比,它表现出许多差异。使用一些浏览器指纹识别技术可以检测 PhantomJS。自版本 59 以来,Google 发布了 Chrome 浏览器的无头版本。与 PhantomJS 不同,它基于普通 Chrome,而不是外部框架,这使得它的存在更难以检测。因此可能还有其他方法来检测 Chrome headless。
\n\n用户代理:用户代理属性通常用于检测操作系统以及用户的浏览器。对于 Chrome 版本 59,它具有以下值:
\n\nMozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/59.0.3071.115 Safari/537.36\nRun Code Online (Sandbox Code Playgroud)\n\n可以通过以下方式检查Chrome headless是否存在:
\n\nif (/HeadlessChrome/.test(window.navigator.userAgent)) {\n console.log("Chrome headless detected");\n}\nRun Code Online (Sandbox Code Playgroud)Plugins:navigator.plugins返回浏览器中存在的插件数组。通常,在 Chrome 上我们会找到默认插件,例如Chrome PDF viewer或Google Native Client。相反,在无头模式下,返回的数组不包含包含插件。
可以通过以下方式检查插件是否存在:
\n\nif(navigator.plugins.length == 0) {\n console.log("It may be Chrome headless");\n}\nRun Code Online (Sandbox Code Playgroud)语言:在 Chrome 中,两个 Javascript 属性可以获取user: navigator.language和所使用的语言navigator.languages。第一个是浏览器 UI 的语言,第二个是表示用户\xe2\x80\x99 首选语言的字符串数组。但是,在无头模式下,navigator.languages返回空字符串。
可以通过以下方式检查语言是否存在:
\n\nif(navigator.languages == "") {\n console.log("Chrome headless detected");\n}\nRun Code Online (Sandbox Code Playgroud)WebGL:WebGL 是一种在 HTML 画布中执行 3D 渲染的 API。通过此API,可以查询图形驱动程序的供应商以及图形驱动程序的渲染器。使用普通 Chrome 和 Linux,我们可以获得渲染器和供应商的以下值:Google SwiftShader和Google Inc.。在无头模式下,我们可以获得Mesa OffScreen,这是不使用任何类型的窗口系统进行渲染的技术,以及Brian Paul,这是启动开源 Mesa 图形库的程序。
可以通过以下方式检查WebGL是否存在:
\n\nvar canvas = document.createElement(\'canvas\');\nvar gl = canvas.getContext(\'webgl\');\n\nvar debugInfo = gl.getExtension(\'WEBGL_debug_renderer_info\');\nvar vendor = gl.getParameter(debugInfo.UNMASKED_VENDOR_WEBGL);\nvar renderer = gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL);\n\nif(vendor == "Brian Paul" && renderer == "Mesa OffScreen") {\n console.log("Chrome headless detected");\n}\nRun Code Online (Sandbox Code Playgroud)并非所有 Chrome headless 都具有相同的供应商和渲染器值。其他保留的值也可以在非无头版本上找到。然而,Mesa Offscreen和Brian Paul表明存在无头版本。
浏览器功能:Modernizr 库可以测试浏览器中是否存在各种 HTML 和 CSS 功能。我们发现 Chrome 和无头 Chrome 之间的唯一区别是后者没有发际线功能,该功能可检测对hidpi/retina hairlines.
可以通过以下方式检查是否存在发际线特征:
\n\nif(!Modernizr["hairline"]) {\n console.log("It may be Chrome headless");\n}\nRun Code Online (Sandbox Code Playgroud)缺少图像:我们列表中的最后一个似乎也是最强大的,来自 Chrome 使用的图像尺寸,以防图像无法加载。对于普通 Chrome,图像的宽度和高度取决于浏览器的缩放,但不为零。在无头 Chrome 中,图像的宽度和高度为零。
\n\n可以通过以下方式检查是否存在丢失图像:
\n\nvar body = document.getElementsByTagName("body")[0];\nvar image = document.createElement("img");\nimage.src = "http://iloveponeydotcom32188.jg";\nimage.setAttribute("id", "fakeimage");\nbody.appendChild(image);\nimage.onerror = function(){\n if(image.width == 0 && image.height == 0) {\n console.log("Chrome headless detected");\n }\n}\nRun Code Online (Sandbox Code Playgroud)这些是无头浏览器更容易被检测到的一些关键因素。
\n\n| 归档时间: |
|
| 查看次数: |
10573 次 |
| 最近记录: |