selenium反爬案例-1.0

Js脚本代码

// 定义: 隐藏 Selenium 自动化特征的 JavaScript 脚本

// 要防止被检测为爬虫,尤其是通过隐藏 Selenium 启动的浏览器生成的某些属性

// 尝试重定义 navigator.webdriver 属性,捕获任何错误
try {
    Object.defineProperty(navigator, 'webdriver', { get: () => undefined });
} catch (e) {
    console.warn("无法重定义 'navigator.webdriver'");
}

// 修改navigator.plugins、navigator.languages等属性
try {
    Object.defineProperty(navigator, 'plugins', { get: () => [] });
    Object.defineProperty(navigator, 'languages', { get: () => ['en-US', 'en'] });
} catch (e) {
    console.warn("无法修改 'navigator.plugins' 或 'navigator.languages'");
}

// 尝试修改 window.navigator 中的其他属性
try {
    window.navigator.__defineGetter__('webdriver', function() {
        return undefined;
    });
} catch (e) {
    console.warn("无法修改 'window.navigator.webdriver'");
}

// 禁用开发者模式的提示(例如 Chrome Headless)
try {
    window.chrome = { ...window.chrome, runtime: {} };
} catch (e) {
    console.warn("无法修改 'window.chrome.runtime'");
}

// 覆盖 console 中的一些方法,避免检测
try {
    console.log = function() {};
    console.info = function() {};
    console.error = function() {};
} catch (e) {
    console.warn("无法修改 'console' 方法");
}

// 修改 userAgent,避免检测到 HeadlessChrome
const userAgent = navigator.userAgent;
if (userAgent.includes('HeadlessChrome')) {
    try {
        Object.defineProperty(navigator, 'userAgent', {
            get: () => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
        });
    } catch (e) {
        console.warn("无法修改 'navigator.userAgent'");
    }
}

爬虫代码

import time
from selenium import webdriver

# 反爬配置
opt = webdriver.ChromeOptions()
opt.add_argument('--disable-infobars')  # 禁用 "Chrome正在被自动化软件控制" 的提示栏
opt.add_experimental_option('excludeSwitches', ["enable-automation"])  # 移除 "chrome正在被自动化程序控制" 的提示
opt.add_experimental_option('useAutomationExtension', False)  # 禁用自动化扩展

# 启动浏览器并应用上述配置
driver = webdriver.Chrome(options=opt)

# 读取 JavaScript 文件内容
with open("hide_selenium-1.0.js", "r", encoding="utf-8") as file:
    js_script = file.read()

print("执行的js代码如下:")
print(js_script)

# 执行 JavaScript 脚本来隐藏 Selenium 的自动化特征
driver.execute_script(js_script)
print("js代码执行完成!")


# 打开目标网址
driver.get("https://www.aqistudy.cn/")
print("打开页面,页面加载完成!")
# 等待页面加载
driver.implicitly_wait(10)  # 等待10秒,确保页面加载完成
print("网址加载完成!")

# 等待 10 秒钟查看效果
time.sleep(10)
print("网页效果展示完成!")

# 关闭浏览器
driver.quit()
print("关闭浏览器")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值