反爬虫——浏览器指纹检测与破解

基于浏览器的爬虫

在爬取基于 web 的数据时,我们经常会遇到反爬虫网站,这些网站需要执行 JavaScript 程序进行页面渲染。这时我们会用到 Playwright、Selenium 等 web 自动化测试框架来模拟浏览器获取页面数据。

浏览器指纹检测

然而,这种方法与正常的浏览器访问有一定区别。例如,window.navigator.webdriver 对象,在正常的 Chrome 浏览器中访问时返回 false。
image.png
而当使用 Selenium或 Playwright 打开浏览器时,该属性为 true。

有许多类似的方法可以检测是否使用了自动化工具,这种检测方式被称为浏览器指纹检测。当然,浏览器指纹检测不仅用于检测是否使用了自动化框架,还可以在未登录的情况下判断两个请求是否由同一浏览器发起。可以通过访问 https://bot.sannysoft.com/ 来检测,这里汇聚了市面上常见的检测手段。

chrome
image.png
playwright
image.png

破解

由于检测方案通常也是通过js调用获取的一些配置对象的值,我们可以在访问页面前修改这些配置来绕过自动话化检测。

这里推荐一个汇聚的比较常用破解方案的插件puppeteer-extra-plugin-stealth

这个插件专门用于绕过各种反自动化检测。它通过应用一系列的补丁和改动,使得 Puppeteer 更难被检测到。
包括且不限于:
• 伪装用户代理字符串(User Agent String)。
• 修改 WebGL 参数。
• 绕过 webdriver 检测。
• 屏蔽 headless 模式特征。
• 隐藏指纹特征。

可以下载已经打包好的js代码。https://cdn.jsdelivr.net/gh/requireCool/stealth.min.js/stealth.min.js
然后在访问需要爬取数据之前先执行这个修改程序。

browser_context.add_init_script(path="./stealth.min.js")

如果是playwright也可以直接使用封装好的库。

import asyncio
from playwright.async_api import async_playwright
from playwright_stealth import stealth_async

async def main():
    async with async_playwright() as p:
        for browser_type in [p.chromium, p.firefox, p.webkit]:
            browser = await browser_type.launch()
            page = await browser.new_page()
            await stealth_async(page)
            await page.goto('http://whatsmyuseragent.org/')
            await page.screenshot(path=f'example-{browser_type.name}.png')
            await browser.close()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值