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

在《在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 asynciofrom 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 函数。

参考资料

[1]

Pyppeteer 的官方 API: https://miyakogi.github.io/pyppeteer/reference.html#pyppeteer.page.Page.evaluateOnNewDocument

webdriver原理_(最新版)如何正确移除 Pyppeteer 中的window.navigator.webdriver相关推荐

  1. chrome webdriver_(最新版)如何正确移除Selenium中的 window.navigator.webdriver

    摄影:产品经理产品经理的三文鱼炒饭 在<一日一技:如何正确移除Selenium中window.navigator.webdriver的值>一文中,我们介绍了在当时能够正确从Selenium ...

  2. 移除Selenium的浏览器window.navigator.webdriver等20多个指纹特征

    Selenium特征指纹 一般Selenium自动打开浏览器后,会给其增加一些特征指纹,如下图: 怎样才能去掉这些特征呢? 有一种现成的nodejs库puppeteer-extra,这里面有一个ext ...

  3. android handler的机制和原理_第一百八十回:Android中的Handler机制九

    各位看官们大家好,上一回中咱们说的是Android中Handler机制的例子,这一回咱们继续说该例子.闲话休提,言归正转.让我们一起Talk Android吧! 看官们,由于时间的原因我们在上一回中只 ...

  4. python列表生成式原理_三元表达式/和/或如何在Python中工作/真与假的性质/列表生成/生成器,and,or,执行,原理,True,False,本质,生成式...

    一看标题,看似是三个不相关的问题,实际上息息相关. 我们都知道,"C系语言(C\C++.C#.Java等)"都有一个共同的知识点:三目运算符,其主要作用还是为了简化选择结构语句.让 ...

  5. python 无头模式 绕过检测_网络爬虫之使用pyppeteer替代selenium完美绕过webdriver检测...

    1引言 曾经使用模拟浏览器操作(selenium + webdriver)来写爬虫,但是稍微有点反爬的网站都会对selenium和webdriver进行识别,网站只需要在前端js添加一下判断脚本,很容 ...

  6. chrome webdriver_网络爬虫之使用pyppeteer替代selenium完美绕过webdriver检测 阅读目录

    1 引言 曾经使用模拟浏览器操作(selenium + webdriver)来写爬虫,但是稍微有点反爬的网站都会对selenium和webdriver进行识别,网站只需要在前端js添加一下判断脚本,很 ...

  7. Selenium Webdriver原理终于搞清楚了

    目录 1. Selenium的历史 2. WebDriver协议 3. Selenium驱动浏览器原理 4. 测试代码与Webdriver的交互 5. Webdriver与浏览器的关系 6. Sele ...

  8. Java jta 原理_分布式事务JTA实现Atomikos与Spring集成实践

    Atomikos官网无法访问,不过Maven中央库中具atomikos包.Atomikos集成Spring,Hibernate,Mybatis网上文章比较多,本文是通过JavaSE的方式借用Sprin ...

  9. WebDriver原理分析

    WebDriver原理分析 WebDriver与之前Selenium的JS注入实现不同,直接利用了浏览器native support来操作浏览器.所以对于不同平台,不同的浏览器,必须依赖一个特定的浏览 ...

最新文章

  1. Union和Union All的区别
  2. mysql 和 mongo db 语法对比
  3. [CF396E]On Iteration of One Well-Known Function
  4. TypeError: type str doesn't define __round__ method
  5. 怎么用计算机算p a,老师,(P/A,12%,10)这个值用计算器怎么算出来?
  6. 【渝粤教育】电大中专Windows操作系统作业 题库
  7. 2020身高体重标准表儿童_2020年儿童标准体重表出炉!过胖影响发育!(附身高体重标准表)...
  8. 前端性能优化经典:javascript防抖节流
  9. C语言,产生一组数字,并将其写入txt文档中
  10. 小白写linux环境下的定时监测
  11. 理解 Delphi 的类(十) - 深入方法[21] - 开放数组参数
  12. Java中static的用法,初始化块
  13. 世上哪有那么多的怀才不遇
  14. 中国的程序员培训是不是有问题
  15. 程序员的工资到底花到哪里去了?
  16. 泰勒公式(泰勒展开式,泰勒中值定理)使用基本技巧
  17. 校招-蘑菇街,阿里面试总结
  18. 清华计算机系科学博士毕业论文要求,博士可以不发SCI毕业?清华取消博士论文发表强制要求...
  19. Web UI自动化中使用cookies登录
  20. sap fi清账函数POSTING_INTERFACE*的使用

热门文章

  1. 【免费毕设】php+mysql社区交流系统(毕业论文+系统+说明书)
  2. java中static_认识java中的static
  3. IT专业沦为新时代农民工?为什么你身边的人都不让你报计算机专业?
  4. 计算机中专自考,中专怎么自考大专
  5. mysql select大全_Mysql select 大全
  6. 1971旗舰cpu intel_Intel 酷睿i7 9700F搭配影驰GeForce RTX 2060大将
  7. discuz中写一个表单,数据存入到数据库中,再从数据库读出来显示在列表中
  8. 百度云盘免下载百度云盘全速下载方法
  9. 【Linux文件系统监控的Java类库 inotify-java】
  10. C# 使用摄像头拍照 支持Win7 64位