小编Luk*_*ton的帖子

Python Selenium AWS Lambda 更改 WebGL 供应商/渲染器以实现无法检测的 Headless Scraper

概念:

将 AWS Lambda 函数与 Python 和 Selenium 结合使用,我想通过无头 chrome 测试来创建无法检测的无头 chrome刮刀。我通过打开测试并截取屏幕截图来检查无头刮刀的不可检测性。我在本地 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,
        )
Run Code Online (Sandbox Code Playgroud)

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


本地IDE:

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


拉姆达服务器:

当我在 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);};"})
Run Code Online (Sandbox Code Playgroud)

然后我想可能是参数号有问题。我配置了不使用 if 语句的命令执行,但发生了同样的事情:它在我的本地 IDE 上运行,但对 …

javascript python selenium google-chrome amazon-web-services

9
推荐指数
1
解决办法
3858
查看次数

Python Selenium 代理网络

概述

我正在使用代理网络,并希望在 Python 上使用 Selenium 对其进行配置。我见过很多帖子使用该HOST:PORT方法,但代理网络使用的“URL方法” http://USER:PASSWORD@PROXY:PORT

硒线

我发现SeleniumWire 是一种将代理网络的“URL 方法”连接到 Selenium Scraper 的方法。请参阅基本 SeleniumWire 配置:

from seleniumwire import webdriver

options = {
    'proxy':
    {
        'http': 'http://USER:PASSWORD@PROXY:PORT',
        'https': 'http://USER:PASSWORD@PROXY:PORT'
    },
}

driver = webdriver.Chrome(seleniumwire_options=options)
driver.get("https://some_url.com")
Run Code Online (Sandbox Code Playgroud)

正确地添加并循环了驱动程序的代理但是在许多网站上,爬虫很快就被 CloudFlare阻止。在本地 IP 上运行时不会发生这种阻塞。在搜索 SeleniumWire 的 GitHub Repository Issues后,我发现这是由 TLS 指纹识别引起的,并且当前没有解决此问题的方法。

硒选项

我尝试以传统的硒方式配置代理:

from selenium import webdriver

options = webdriver.ChromeOptions()
options.add_argument("--proxy-server=http://USER:PASSWORD@PROXY:PORT")
driver = webdriver.Chrome(options=options)
driver.get("https://some_url.com")
Run Code Online (Sandbox Code Playgroud)

浏览器实例确实打开,但由于网络错误而失败。浏览器实例不会加载到已建立的 URL …

python proxy selenium selenium-webdriver docker

5
推荐指数
1
解决办法
1543
查看次数