(最新版)如何正确移除 Pyppeteer 中的window.navigator.webdriver

简介: (最新版)如何正确移除 Pyppeteer 中的window.navigator.webdriver

摄影:产品经理春天来了~

《在Pyppeteer中正确隐藏window.navigator.webdriver 》一文中,我们介绍了修改源代码使Pyppeteer 打开的 Chrome 隐藏window.navigator.webdriver的方法。

然而时过境迁,随着 Chrome 版本升级,这一方法也宣告失效。

在前几天的文章《(最新版)如何正确移除Selenium中的 window.navigator.webdriver 》我们介绍了在 Selenium 中如何隐藏最新版 Chrome 的window.navigator.webdriver的方法。今天我们来讲讲如何隐藏Pyppeteer。

今天的方法非常简单,不需要修改源代码。

大家阅读 Selenium 版的文章,应该看到我们的原理是通过 CDP 执行一段 JavaScript 代码。这段代码中有一个关键词叫做addScriptToEvaluateOnNewDocument。表示添加一段脚本,在打开新文档时执行。

我们记住这个关键词EvaluateOnNewDocument。现在大家打开 Pyppeteer 的官方 API[1],搜索evaluateOnNewDocument可以看到原来 Pyppeteer 也是支持这个功能的。

这样一来文件就非常简单了,我们在 Pyppeteer 里面直接调用它,并传递 JavaScript 代码就好了:

import asyncio
from pyppeteer import launch
asyncdef 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 函数。

目录
相关文章
|
JSON 运维 JavaScript
进程管理工具PM2在python项目中的使用
说到进程管理,后端和运维的同学都不陌生。生产项目以及一些脚本任务都需要进行进程管理。现在市场上用得最多的当属supervisor了,但是它只能运行在 Unix-Like 的系统上,也就是说supervisor不能再windows上运行。 我们这里说的是另外一个进程管理工具PM2,PM2不仅仅适用于Unix-Like系统,同样适用于windows系统。这点对于开发者来说也是个福音,下面我们来说说PM2的简单使用。
1395 0
进程管理工具PM2在python项目中的使用
|
Web App开发 JavaScript
2021最新Selenium真正绕过webdriver检测
2021最新Selenium真正绕过webdriver检测
506 0
|
传感器 监控 测试技术
LabVIEW程序闪退问题
LabVIEW程序闪退问题
279 2
|
11月前
|
数据采集 JavaScript 前端开发
JavaScript逆向爬虫——使用Python模拟执行JavaScript
JavaScript逆向爬虫——使用Python模拟执行JavaScript
352 2
|
Docker 容器
docker重命名镜像名称以及tag版本
docker重命名镜像名称以及tag版本
1678 0
|
Windows
Win10或Win11更新补丁后导致360随身wifi提示USB设备驱动异常,创建Wifi网络失败
Win10或Win11更新补丁后导致360随身wifi提示USB设备驱动异常,创建Wifi网络失败
1996 0
|
数据库
MybatisPlus逻辑删除
MybatisPlus逻辑删除
196 0
|
Java Spring
OpenFeign 如何设置动态 URL?
本文介绍如何在OpenFeign中设置动态 URL
OpenFeign 如何设置动态 URL?
|
关系型数据库 MySQL 数据安全/隐私保护
Docker Compose部署案例
本实验介绍了如何在DockerCompose中部署WordPress