目录

一、背景

二、浏览器伪装

三、其他

四、使用代理服务器


一、背景

        python通常用来做爬虫、自动化相关的事情,但通过python自动化工具打开并控制的浏览器(谷歌及chrom内核浏览器),在浏览器环境中的navigator.webdriver、指纹等相关参数会与我们平常手动打开的浏览器不一致,反爬虫一般会监测这些,从而拦截自动化工具的访问。此时,我们就需要伪装正常打开浏览器的特征。

二、浏览器伪装

        GitHub里有一个开源的工具:extract-stealth-evasions ,用来生成一段js代码补丁,可以注入到打开的浏览器里面,工具会自动补全使用自动化工具打开浏览器时缺失的浏览器特征,隐藏自动化的特征。

        执行以下命令会在当前文件夹下生成一个包含全量补丁代码的 stealth.min.js 文件,可以在自动化工具打开目标网站前,将js文件引入并在每个页面打开前执行一次。

npx extract-stealth-evasions

        浏览器CDP协议有暴漏一个双向通信的api接口协议(addScriptToEvaluateOnNewDocument),可以把上面的伪装js文件添加到此接口,这样在新页面打开或刷新时,都会注入执行一次伪装js代码。

# selenium
driver.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', {
    'source': stealth_js_code
})

# drissionpage
page.run_cdp('Page.addScriptToEvaluateOnNewDocument', {
    'source': stealth_js_code
})

三、其他

        上述伪装js代码注入需在打开目标网站前完成,否则就可能会被检测到。同时还可以配合其他一些启动参数。

# 1. 隐藏自动化控制条
co.set_argument('--disable-blink-features', 'AutomationControlled')
# 2. 去除自动化提示开关
co.experimental_set_pref('excludeSwitches', ['enable-automation'])

四、使用代理服务器

        有的一些特殊网站等,对访问的ip地域有限制,这时候就不得不通过代理的方式来进行访问,但浏览器启动时无法传入代理认证信息,只能通过浏览器插件的方式在代码方面把认证信息传入。最后通过add_extension的方式添加到启动的浏览器中。

        扩展插件可以参考我的资源(ProxyServerPlugin)相关代码。

更多推荐