- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
概念:
使用带有 Python 和 Selenium 的 AWS Lambda 函数,我想通过传递 headless chrome test 创建一个无法检测到的 headless chrome 刮板。 .我通过打开测试并截取屏幕截图来检查 headless 刮刀的不可检测性。我在本地 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 服务器上实现了这个配置来比较结果。
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);};"})
然后我想可能是参数号有问题。我在没有 if 语句的情况下配置了命令执行,但发生了同样的事情:它在我的本地 IDE 上工作,但对 AWS Lambda 服务器没有影响。
最佳答案
WebGL
WebGL是一个跨平台的开放网络标准,用于基于 OpenGL ES 的低级 3D 图形 API,通过 HTML5 Canvas 元素暴露给 ECMAScript。 WebGL 的核心是使用 GLSL 的基于着色器的 API,其结构在语义上类似于底层 OpenGL ES API。它遵循 OpenGL ES 规范,但内存管理不足的语言(如 JavaScript)有一些异常(exception)。 WebGL 1.0 公开了 OpenGL ES 2.0 功能集; WebGL 2.0 公开了 OpenGL ES 3.0 API。
现在,Selenium Stealth 的可用性使用 Selenium 构建不可检测的刮板驱动 ChromeDriver发起google-chrome浏览上下文变得更加容易。
Selenium 隐形
selenium-stealth是一个 python 包 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/")
You can find a detailed relevant discussion in Can a website detect when you are using Selenium with chromedriver?
在 AWS Lambda 中更改 WebGL vendor/渲染器
AWS Lambda 使我们能够 deliver compressed WebGL websites to end users .当请求的网页对象被压缩时,传输大小会减小,从而导致更快的下载、更低的云存储费用和更低的数据传输费用。改进的加载时间也直接影响观众体验和留存率,这有助于提高网站的转化率和可发现性。使用 WebGL,网站更加身临其境,同时仍可通过浏览器 URL 访问。 AWS Lambda 通过这种技术自动压缩上传到 S3 的对象。
压缩和 WebGL 的背景
HTTP 压缩是一种可以内置到 Web 服务器和 Web 客户端中的功能,以提高传输速度和带宽利用率。这种能力是在服务器和客户端之间使用 HTTP header 协商的,该 header 可以指示正在传输、缓存或以其他方式引用的资源是压缩的。服务器端的 AWS Lambda 支持 Content-Encoding header 。
在客户端,当今大多数浏览器都支持通过 HTTP header (Accept-Encoding: deflate, br, gzip
) 进行 brotli 和 gzip 压缩,并且可以处理服务器响应 header 。这意味着在将网页呈现给查看器之前,浏览器将自动从客户端的 Web 服务器下载和解压缩内容。
结论
由于这个限制,您可能无法更改 AWS Lambda 中的 WebGL Vendor/Renderer,否则它可能会直接影响向查看者呈现网页的过程,并可能成为 UX 的瓶颈。
tl;博士
您可以在以下位置找到一些相关的详细讨论:
Can a website detect when you are using Selenium with chromedriver?
关于javascript - Python Selenium AWS Lambda 更改 WebGL vendor/渲染器以实现无法检测的 headless 刮刀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70265306/
使用 Webpack,支持将代码拆分为不同的包。其中一个选项是指定您想要选择作为分割点的一组模块。 取自 here : var webpack = require("webpack"); module
我正在编写一个依赖于某些导入的库包,但我不确定如何正确处理它。 让我从目录结构开始: go/src/github.com/ ├── developer A/ │ ├── project 1 │
我要在我的 Rails 应用程序中使用 git-submodules 跟踪依赖关系。到目前为止,我已经将 haml、shoulda 和 authlogic 之类的子模块添加到“vendor/plugi
Java 中的 java.vendor 和 java.vm.vendor 属性有区别吗? 看起来两者总是一样的。这是修正假设吗? 如果您知道这两个值不相同的情况,请列出它们。 编辑: 我试图弄清楚哪个
例子:“在测试/虚拟中销售 Rails 应用程序”“为生产销售 Rails 的推荐方法是什么?” 最佳答案 Vendoring 是将所有第 3 方项目(例如插件、gem 甚至 rails)移动到 /v
将我的 Go 服务部署到 Google AppEngine(标准)时,我收到一条错误,描述未找到模块版本,但编译一切正常。 模块位于私有(private) Github 实例上,并 check out
这个问题在这里已经有了答案: Error "can't load package: package my_prog: found packages my_prog and main" (3 个答案)
我是Laravel的新手,我已经安装了PHP,并且我已经在本地服务器上使用过EasyPHP。我也安装了Composer,这里可能会有问题,所以我首先将其安装在PHP低于V8的默认文件夹中。然后我用8.
我正在尝试将一个 Go 项目转换为新的模块标准,但我在一个依赖项上遇到了问题。 该存储库提供了一个库(在本例中为 golang.org/x/net/html)以向该库添加一些功能;这意味着它已经修改了
我在玩 create-react-app和目前的代码拆分。它工作得非常好,直到我开始导入供应商库,这些库将包含在每个块中。 这是我目前的做法: App.js const HomePage = Load
Closed. This question is opinion-based。它当前不接受答案。 想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。 在6个月前关闭
以下两者似乎都有效: element.style.WebkitFlex = 1; element.style.webkitFlex = 1; 但是哪种语法是标准的? 最佳答案 第一个, eleme
我正在构建来自 github.com/tarm/serial 的示例程序. 案例 1:如果将上述 repo check out 到 $GOPATH/src/github.com/tarm/serial
我需要为构建期间使用的工具使用“vendoring”(github.com/mjibson/esc 和 golang.org/x/tools/cmd/stringer) 以满足我们的来源管理要求。 我
在生产构建我的 vue.js 应用程序后,我看到我的 block vendor 文件太大,这对 Web 性能有影响,屏幕如下: 如何减小此文件的大小? 我尝试通过延迟加载在我的 router.js 中
我必须修改 vendor 文件中的结构。假设这是结构体在 vendor 文件中的方式 type sampleStruct struct { sampleStringvar1 str
我正在使用 styled-components我的 React 项目中的库。 我想在开发期间禁用供应商前缀的生成。 在这么多相似的属性中找到一个指定的 CSS 属性来切换它并在浏览器的开发工具中测试是
我想了解在复习 go 模块和 vendor 目录时遇到错误的原因。显然,在主模块和 vendor 文件夹中具有相同的包会导致错误,我想了解原因。据我了解,如果有go.mod go甚至不应该检查 ven
究竟什么是“贩卖”?你如何定义这个词? 它在不同的编程语言中意味着相同的事情吗?从概念上讲,不看确切的实现。 最佳答案 基于 this answer 定义 here为: Vendoring is th
我有一个具有多个入口点的应用程序。但所有入口点都使用相同的第三方库。我想将这些第三方库单独放在一个单独的文件中。当我按照 documentation 中的步骤操作时,它将我的应用程序代码也移动到第三个
我是一名优秀的程序员,十分优秀!