Selenium绕过浏览器指纹的三种方法

浏览器指纹的详细解释可以看这个:

常见的浏览器指纹包含哪些_小锋学长生活大爆炸的博客-CSDN博客

方法一、使用stealth.min.js

反正我是没成功,大家仅供参考

def mergeStealthJS(self, browser):
    # https://bot.sannysoft.com/
    if not os.path.exists('stealth.min.js'):
        url = 'https://cdn.jsdelivr.net/gh/requireCool/stealth.min.js/stealth.min.js'
        resp = requests.get(url)
        with open('stealth.min.js', 'w+') as f:
            f.write(resp.text)

    with open('stealth.min.js', 'r') as f:
        content = f.read()

    browser.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', {'source': content})
    return browser

复制

方法二、使用selenium-stealth

我也没成功,大家可以试试

pip3 install selenium-stealth

复制

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")

# Chrome is controlled by automated test software
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/")

复制

方法三、使用undetected-chromedriver

这个确实成功了~

GitHub - ultrafunkamsterdam/undetected-chromedriver: Custom Selenium Chromedriver | Zero-Config | Passes ALL bot mitigation systems (like Distil / Imperva/ Datadadome / CloudFlare IUAM)

pip3 install undetected_chromedriver

复制

import undetected_chromedriver as uc
driver = uc.Chrome()
driver.get('https://nowsecure.nl')

复制

还有一点要注意:

异常现象:

        如果使用pyinstaller对undetected-chromedriver直接进行打包,那打包后的exe大概率无法运行的。

解决方法:

        在代码最开始在import 模块之前加上以下内容,然后再进行打包即可:

from multiprocessing import freeze_support
freeze_support()

复制

原因解析:

        在调用某些模块的时候,也是进程,而在多进程中,你程序中的进程不会被阻塞,而一直循环起进程。而undetected-chromedriver内部正好就开了进程。

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!

本文分享自作者个人站点/博客:https://blog.csdn.net/sxf1061700625复制

如有侵权,请联系 cloudcommunity@tencent.com 删除。

### 使用 Selenium 和 Java 绕过反爬虫措施 为了实现使用 Selenium 和 Java 来绕过网站的反爬虫机制,可以通过多种方式来伪装浏览器行为并移除自动化痕迹。以下是几种有效的方法: #### 1. 移除 WebDriver 特征标记 许多现代网站会通过检测 `navigator.webdriver` 属性判断是否存在自动化工具运行。此属性默认为 true 当使用 WebDriver 启动浏览器实例时。要隐藏这个特征,可以在启动浏览器之前注入一段 JavaScript 脚本。 ```java import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class BypassAntiBot { public static void main(String[] args) throws InterruptedException { System.setProperty("webdriver.chrome.driver", "path/to/chromedriver"); String jsCode = "(function(){delete navigator.__proto__.webdriver;})();"; WebDriver driver = new ChromeDriver(); ((JavascriptExecutor)driver).executeScript(jsCode); Thread.sleep(3000); // Wait for the script to take effect driver.quit(); } } ``` 这段代码会在创建新的文档对象模型(DOM)前删除 `navigator.webdriver` 属性[^1]。 #### 2. 修改 User-Agent 字符串 某些站点可能会基于请求头中的User-Agent字段识别出非人类用户的活动模式。因此更改该值有助于模拟真实用户环境下的HTTP请求头部信息。 ```java ChromeOptions options = new ChromeOptions(); options.addArguments("--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"); WebDriver driver = new ChromeDriver(options); ``` 这将使目标服务器认为客户端是一个普通的桌面版Google Chrome 浏览器版本[^2]。 #### 3. 加载自定义扩展程序或脚本来规避特定类型的检测 对于更复杂的场景下可能还需要额外处理诸如Canvas指纹、WebGL渲染上下文等高级别的生物特征数据收集技术。此时可以考虑利用第三方库如puppeteer-extra-plugin-stealth 或者直接加载预编译好的Stealth插件文件到Chromium内核中去。 ```java // Load stealth extension into chrome instance. String extPath = "/path/to/extension.crx"; options.addExtensions(new File(extPath)); ``` 这种方法能够有效地干扰那些依赖于上述特性来进行身份验证的服务端逻辑[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值