selenium反反爬虫,隐藏selenium特征

2024-04-18 07:36

本文主要是介绍selenium反反爬虫,隐藏selenium特征,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、stealth.min.js 使用

  • 用selenium爬网页时,常常碰到被检测到selenium ,会被服务器直接判定为非法访问,这个时候就可以用stealth.min.js 来隐藏selenium特征,达到绕过检测的目的
from selenium import webdriver
from selenium.webdriver.chrome.options import Options# 设置 Chrome 选项
chrome_options = Options()# 添加 JavaScript 注入
with open('path/to/stealth.min.js', 'r') as file:stealth_js = file.read()chrome_options.add_argument("--disable-blink-features=AutomationControlled")
chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])
chrome_options.add_experimental_option("useAutomationExtension", False)
chrome_options.add_argument("--disable-extensions")
chrome_options.add_argument("--disable-popup-blocking")
chrome_options.add_argument("--disable-default-apps")
chrome_options.add_argument("--disable-infobars")
chrome_options.add_argument("--disable-gpu")
chrome_options.add_argument("--disable-notifications")
chrome_options.add_argument("--disable-translate")
chrome_options.add_argument("--disable-device-discovery-notifications")
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--headless")
chrome_options.add_argument("--disable-dev-shm-usage")
chrome_options.add_argument("--window-size=1920x1080")
chrome_options.add_argument("--disable-features=VizDisplayCompositor")# 启动 Chrome 浏览器
driver = webdriver.Chrome(options=chrome_options)# 注入 stealth.min.js
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {"source": stealth_js
})# 访问网页
driver.get("https://example.com")# 进行一些操作,例如点击按钮、填写表单等
# driver.find_element_by_xpath("//button[contains(text(),'Click Me')]").click()
# driver.find_element_by_id("username").send_keys("myusername")# 在完成操作后,关闭浏览器
driver.quit()

二、 stealth.min.js 生成
nodejs 直接安装

npx extract-stealth-evasions

三、如何检测是否绕过webdriver检测
1. 访问 https://bot.sannysoft.com/,出现下面的效果即为绕过webdriver
在这里插入图片描述
四、stealth.min.js 隐藏selenium特征原理
在提供的文件中,模拟和替换浏览器API的实例主要集中在以下几个方面:

  1. WebGL 参数获取:stealth.min.js 对WebGLRenderingContext.prototype.getParameter方法的模拟。这是通过创建一个代理(Proxy)来实现的,该代理拦截对getParameter的调用,并根据传入的参数值返回预设的值。例如,它可以模拟UNMASKED_VENDOR_WEBGLUNMASKED_RENDERER_WEBGL参数的返回值,从而隐藏实际的WebGL供应商和渲染器信息。

  2. Navigator 属性模拟:对navigator对象的languageshardwareConcurrency属性的模拟。这些属性通常用于获取用户的语言偏好和硬件并发数(CPU 核心数)。通过使用Proxy对象和特定的处理函数,这些属性的值可以被替换为预设的值,而不是从实际的浏览器环境中获取。

  3. Chrome API 模拟:对chrome对象的模拟,这是在非安全(非HTTPS)环境中的行为。例如,chrome.runtimechrome.notifications等API的行为在非安全环境中可能与安全环境中有所不同。通过模拟这些API,可以在不依赖实际Chrome扩展API的情况下进行测试和开发。

实现原理主要基于以下几个关键点:

  • Proxy 对象:JavaScript的Proxy对象用于创建一个可拦截和重新定义操作(如属性访问、函数调用等)的对象。通过创建一个代理对象并将其绑定到目标对象上,可以控制对目标对象的所有访问和操作。

  • Reflect APIReflectAPI提供了一些方法,允许你以与操作符相同的方式执行常见的对象操作,但会返回一个布尔值或抛出错误,而不是对对象进行操作。这在代理处理程序中非常有用,因为它允许你控制对象操作的行为。

  • 错误处理和堆栈修改:在代理处理程序中,可以通过捕获和修改错误对象的堆栈信息来隐藏代理的存在。这通常涉及到移除或替换错误堆栈中与代理相关的部分。

  • 属性拦截和值替换:在代理处理程序中,可以通过定义getset陷阱来拦截对属性的访问和赋值操作,并根据需要返回或设置模拟的值。

通过这些技术,可以在不改变原始浏览器API行为的情况下,模拟和替换特定的浏览器API行为

五、stealth.min.js 用到的chrome api

  1. chrome.runtime: 这是Chrome扩展程序中用于与扩展程序的运行时环境进行交互的API。文件中模拟了chrome.runtime对象的一些属性和方法,例如:

    • id: 扩展程序的唯一标识符。
    • sendMessage: 用于向扩展程序的其他部分发送消息的方法。
    • connect: 用于与扩展程序的其他部分建立连接的 方法。
  2. chrome.notifications: 这是Chrome扩展程序中用于创建、更新和删除桌面通知的API。虽然文件中没有直接提到chrome.notifications,但它可能是chrome.runtime模拟的一部分,因为通知通常与扩展程序的运行时行为相关。

  3. chrome.csi: 这是Chrome扩展程序中用于收集页面加载时间信息的API。文件中模拟了chrome.csi函数,它返回一个包含页面加载时间数据的对象。

  4. chrome.loadTimes: 这是Chrome扩展程序中用于获取当前页面加载时间信息的API。文件中模拟了chrome.loadTimes方法,它返回一个包含加载时间数据的对象。

  5. **chrome.app: 这是Chrome应用程序中用于访问应用程序特定的信息和方法的API。文件中提到了chrome.app的静态数据,例如安装状态和更新原因。

  6. chrome.permissions: 这是Chrome扩展程序中用于查询和管理应用程序的权限的API。文件中模拟了Permissions对象的query方法,它用于检查某个功能(如通知)的权限状态。

  7. chrome.Pluginchrome.MimeType: 这些API用于获取和管理插件和MIME类型的信息。文件中模拟了navigator.pluginsnavigator.mimeTypes对象,这些对象分别代表已安装的插件和支持的MIME类型。

这些模拟的API允许开发者在不依赖实际Chrome扩展API的情况下进行测试和开发。通过模拟这些API,开发者可以在不同的环境或条件下控制和监视应用程序的行为,同时避免了对实际浏览器API的直接调用。
在这里插入图片描述

这篇关于selenium反反爬虫,隐藏selenium特征的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/914146

相关文章

PyInstaller打包selenium-wire过程中常见问题和解决指南

《PyInstaller打包selenium-wire过程中常见问题和解决指南》常用的打包工具PyInstaller能将Python项目打包成单个可执行文件,但也会因为兼容性问题和路径管理而出现各种运... 目录前言1. 背景2. 可能遇到的问题概述3. PyInstaller 打包步骤及参数配置4. 依赖

使用Python实现一键隐藏屏幕并锁定输入

《使用Python实现一键隐藏屏幕并锁定输入》本文主要介绍了使用Python编写一个一键隐藏屏幕并锁定输入的黑科技程序,能够在指定热键触发后立即遮挡屏幕,并禁止一切键盘鼠标输入,这样就再也不用担心自己... 目录1. 概述2. 功能亮点3.代码实现4.使用方法5. 展示效果6. 代码优化与拓展7. 总结1.

Flutter监听当前页面可见与隐藏状态的代码详解

《Flutter监听当前页面可见与隐藏状态的代码详解》文章介绍了如何在Flutter中使用路由观察者来监听应用进入前台或后台状态以及页面的显示和隐藏,并通过代码示例讲解的非常详细,需要的朋友可以参考下... flutter 可以监听 app 进入前台还是后台状态,也可以监听当http://www.cppcn

Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)

《Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)》本文介绍了如何使用Python和Selenium结合ddddocr库实现图片验证码的识别和点击功能,感兴趣的朋友一起看... 目录1.获取图片2.目标识别3.背景坐标识别3.1 ddddocr3.2 打码平台4.坐标点击5.图

Apache Tomcat服务器版本号隐藏的几种方法

《ApacheTomcat服务器版本号隐藏的几种方法》本文主要介绍了ApacheTomcat服务器版本号隐藏的几种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1. 隐藏HTTP响应头中的Server信息编辑 server.XML 文件2. 修China编程改错误

Python3 BeautifulSoup爬虫 POJ自动提交

POJ 提交代码采用Base64加密方式 import http.cookiejarimport loggingimport urllib.parseimport urllib.requestimport base64from bs4 import BeautifulSoupfrom submitcode import SubmitCodeclass SubmitPoj():de

OmniGlue论文详解(特征匹配)

OmniGlue论文详解(特征匹配) 摘要1. 引言2. 相关工作2.1. 广义局部特征匹配2.2. 稀疏可学习匹配2.3. 半稠密可学习匹配2.4. 与其他图像表示匹配 3. OmniGlue3.1. 模型概述3.2. OmniGlue 细节3.2.1. 特征提取3.2.2. 利用DINOv2构建图形。3.2.3. 信息传播与新的指导3.2.4. 匹配层和损失函数3.2.5. 与Super

Python:豆瓣电影商业数据分析-爬取全数据【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】

**爬取豆瓣电影信息,分析近年电影行业的发展情况** 本文是完整的数据分析展现,代码有完整版,包含豆瓣电影爬取的具体方式【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】   最近MBA在学习《商业数据分析》,大实训作业给了数据要进行数据分析,所以先拿豆瓣电影练练手,网络上爬取豆瓣电影TOP250较多,但对于豆瓣电影全数据的爬取教程很少,所以我自己做一版。 目

恶意PNG:隐藏在图片中的“恶魔”

<img src="https://i-blog.csdnimg.cn/blog_migrate/bffb187dc3546c6c5c6b8aa18b34b962.jpeg" title="214201hhuuhubsuyuukbfy_meitu_1_meitu_2.jpg"/></strong></span><

Golang 网络爬虫框架gocolly/colly(五)

gcocolly+goquery可以非常好地抓取HTML页面中的数据,但碰到页面是由Javascript动态生成时,用goquery就显得捉襟见肘了。解决方法有很多种: 一,最笨拙但有效的方法是字符串处理,go语言string底层对应字节数组,复制任何长度的字符串的开销都很低廉,搜索性能比较高; 二,利用正则表达式,要提取的数据往往有明显的特征,所以正则表达式写起来比较简单,不必非常严谨; 三,使