扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
如何正确移除中Pyppeteer的window.navigator.webdriver,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
10年积累的成都网站设计、成都网站建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站策划后付款的网站建设流程,更有樟树免费网站建设让你可以放心的选择与我们合作。
时过境迁,随着 Chrome 版本升级,这一方法也宣告失效。
今天我们来讲讲如何隐藏Pyppeteer。
今天的方法非常简单,不需要修改源代码。
大家阅读 Selenium 版的文章,应该看到我们的原理是通过 CDP 执行一段 JavaScript 代码。这段代码中有一个关键词叫做addScriptToEvaluateOnNewDocument
。表示添加一段脚本,在打开新文档时执行。
我们记住这个关键词EvaluateOnNewDocument
。现在大家打开 Pyppeteer 的官方 API[1],搜索evaluateOnNewDocument
可以看到原来 Pyppeteer 也是支持这个功能的。
这样一来文件就非常简单了,我们在 Pyppeteer 里面直接调用它,并传递 JavaScript 代码就好了:
import asyncio
from pyppeteer import launch
async def main():
browser = await launch(executablePath='/Applications/Google Chrome.app/Contents/MacOS/Google Chrome', headless=False)
page = await browser.newPage()
await page.evaluateOnNewDocument('''() => {
Object.defineProperty(navigator, 'webdriver', {
get: () => undefined
})
}
''')
await page.goto('http://exercise.kingname.info')
input('检查完毕后按下回车键关闭窗口...')
await browser.close()
asyncio.run(main())
代码的运行效果如下图所示:
完美解决问题。并且只要你不开新的选项卡或者新的窗口,只在当前窗口打开新的网址或者刷新页面,这个 js 代码都是自动生效的,不需要重复执行。
其中关键的代码就是:
await page.evaluateOnNewDocument('''() => {
Object.defineProperty(navigator, 'webdriver', {
get: () => undefined
})
}
''')
让 Pyppeteer 在每个新页面加载的时候,所有网站自带的 js 执行之前,执行参数中的这段JavaScript 函数。
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注创新互联行业资讯频道,感谢您对创新互联的支持。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流