繁体   English   中英

Python Selenium AWS Lambda 将 WebGL 供应商/渲染器更改为不可检测的无头刮刀

[英]Python Selenium AWS Lambda Change WebGL Vendor/Renderer For Undetectable Headless Scraper

概念:

使用带有 Python 和 Selenium 的 AWS Lambda 函数,我想通过无头镀铬测试来创建无法检测到的无头镀铬刮刀。 我通过打开测试并截取屏幕截图来检查无头刮刀的不可检测性。 我在本地 IDE 和 Lambda 服务器上运行了这个测试。


执行:

我将使用一个名为selenium-stealth的 python 库,并将遵循它们的基本配置:

stealth(driver,
        languages=["en-US", "en"],
        vendor="Google Inc.",
        platform="Win32",
        webgl_vendor="Intel Inc.",
        renderer="Intel Iris OpenGL Engine",
        fix_hairline=True,
        )

我在本地 IDE 以及 AWS Lambda 服务器上实现了此配置以比较结果。


本地 IDE:

下面是在本地 IDE 上运行的测试结果: 在此处输入图像描述


Lambda 服务器:

当我在 Lambda 服务器上运行它时, WebGL 供应商和渲染器都是空白的。 如下所示:

在此处输入图像描述

我什至尝试使用以下 JavaScript 命令手动更改 WebGL 供应商/渲染器:

driver.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', {"source": "WebGLRenderingContext.prototype.getParameter = function(parameter) {if (parameter === 37445) {return 'VENDOR_INPUT';}if (parameter === 37446) {return 'RENDERER_INPUT';}return getParameter(parameter);};"})

简单的说:

是否可以在 AWS Lambda 上添加供应商/渲染器 在我的努力下,似乎没有办法。 我确保在 selenium-stealth GitHub Repository 上提交了这个问题

WebGL

WebGL is a cross-platform, open web standard for a low-level 3D graphics API based on OpenGL ES, exposed to ECMAScript via the HTML5 Canvas element. WebGL 的核心是使用 GLSL 的基于着色器的 API,其结构在语义上类似于底层 OpenGL ES API 的结构。 它遵循 OpenGL ES 规范,但内存管理不足的语言有一些例外,例如 JavaScript。 WebGL 1.0 公开了 OpenGL ES 2.0 功能集; WebGL 2.0 公开了 OpenGL ES 3.0 API。

现在,随着 Selenium 的推出,使用Selenium驱动的ChromeDriver发起浏览上下文隐形构建不可检测的刮板变得更加容易。


硒隐形

selenium-stealth是 python package selenium-stealth 以防止检测。 该程序试图使 python selenium 更加隐蔽。 但是,截至目前 selenium-stealth 仅支持 Selenium Chrome。

  • 代码块:

     from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.chrome.service import Service from selenium_stealth import stealth options = Options() options.add_argument("start-maximized") options.add_experimental_option("excludeSwitches", ["enable-automation"]) options.add_experimental_option('useAutomationExtension', False) s = Service('C:\\BrowserDrivers\\chromedriver.exe') driver = webdriver.Chrome(service=s, options=options) # Selenium Stealth settings stealth(driver, languages=["en-US", "en"], vendor="Google Inc.", platform="Win32", webgl_vendor="Intel Inc.", renderer="Intel Iris OpenGL Engine", fix_hairline=True, ) driver.get("https://bot.sannysoft.com/")
  • 浏览器截图:

bot_sannysoft


在 AWS Lambda 中更改 WebGL 供应商/渲染器

AWS Lambda 使我们能够将压缩的 WebGL 网站交付给最终用户 当请求的网页对象被压缩时,传输大小会减小,从而导致更快的下载、更低的云存储费用和更低的数据传输费用。 改进的加载时间还直接影响查看者的体验和留存率,这有助于提高网站的转化率和可发现性。 使用 WebGL,网站更加身临其境,同时仍可通过浏览器 URL 访问。 通过这种技术 AWS Lambda 自动压缩上传到 S3 的对象。

product-page-diagram_Lambda-RealTimeFileProcessing.a59577de4b6471674a540b878b0b684e0249a18c

压缩和 WebGL 的背景

HTTP 压缩功能可以内置到 web 服务器和 web 客户端中,以提高传输速度和带宽利用率。 此功能在服务器和客户端之间使用 HTTP header 协商,这可能表明正在传输、缓存或以其他方式引用的资源已压缩。 服务器端的 AWS Lambda 支持内容编码 header。

在客户端,当今大多数浏览器通过 HTTP 标头( Accept-Encoding: deflate, br, gzip )支持 brotli 和 gzip 压缩,并且可以处理服务器响应标头。 这意味着在将网页呈现给查看器之前,浏览器将自动从客户端的 web 服务器下载和解压缩内容。


结论

由于此限制,您可能无法更改 AWS Lambda 中的 WebGL Vendor/Renderer,否则它可能会直接影响向查看者呈现网页的过程,并可能成为 UX 的瓶颈。


tl; 博士

您可以在以下位置找到一些相关的详细讨论:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM