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 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相关推荐
- chrome webdriver_(最新版)如何正确移除Selenium中的 window.navigator.webdriver
摄影:产品经理产品经理的三文鱼炒饭 在<一日一技:如何正确移除Selenium中window.navigator.webdriver的值>一文中,我们介绍了在当时能够正确从Selenium ...
- 移除Selenium的浏览器window.navigator.webdriver等20多个指纹特征
Selenium特征指纹 一般Selenium自动打开浏览器后,会给其增加一些特征指纹,如下图: 怎样才能去掉这些特征呢? 有一种现成的nodejs库puppeteer-extra,这里面有一个ext ...
- android handler的机制和原理_第一百八十回:Android中的Handler机制九
各位看官们大家好,上一回中咱们说的是Android中Handler机制的例子,这一回咱们继续说该例子.闲话休提,言归正转.让我们一起Talk Android吧! 看官们,由于时间的原因我们在上一回中只 ...
- python列表生成式原理_三元表达式/和/或如何在Python中工作/真与假的性质/列表生成/生成器,and,or,执行,原理,True,False,本质,生成式...
一看标题,看似是三个不相关的问题,实际上息息相关. 我们都知道,"C系语言(C\C++.C#.Java等)"都有一个共同的知识点:三目运算符,其主要作用还是为了简化选择结构语句.让 ...
- python 无头模式 绕过检测_网络爬虫之使用pyppeteer替代selenium完美绕过webdriver检测...
1引言 曾经使用模拟浏览器操作(selenium + webdriver)来写爬虫,但是稍微有点反爬的网站都会对selenium和webdriver进行识别,网站只需要在前端js添加一下判断脚本,很容 ...
- chrome webdriver_网络爬虫之使用pyppeteer替代selenium完美绕过webdriver检测 阅读目录
1 引言 曾经使用模拟浏览器操作(selenium + webdriver)来写爬虫,但是稍微有点反爬的网站都会对selenium和webdriver进行识别,网站只需要在前端js添加一下判断脚本,很 ...
- Selenium Webdriver原理终于搞清楚了
目录 1. Selenium的历史 2. WebDriver协议 3. Selenium驱动浏览器原理 4. 测试代码与Webdriver的交互 5. Webdriver与浏览器的关系 6. Sele ...
- Java jta 原理_分布式事务JTA实现Atomikos与Spring集成实践
Atomikos官网无法访问,不过Maven中央库中具atomikos包.Atomikos集成Spring,Hibernate,Mybatis网上文章比较多,本文是通过JavaSE的方式借用Sprin ...
- WebDriver原理分析
WebDriver原理分析 WebDriver与之前Selenium的JS注入实现不同,直接利用了浏览器native support来操作浏览器.所以对于不同平台,不同的浏览器,必须依赖一个特定的浏览 ...
最新文章
- Union和Union All的区别
- mysql 和 mongo db 语法对比
- [CF396E]On Iteration of One Well-Known Function
- TypeError: type str doesn't define __round__ method
- 怎么用计算机算p a,老师,(P/A,12%,10)这个值用计算器怎么算出来?
- 【渝粤教育】电大中专Windows操作系统作业 题库
- 2020身高体重标准表儿童_2020年儿童标准体重表出炉!过胖影响发育!(附身高体重标准表)...
- 前端性能优化经典:javascript防抖节流
- C语言,产生一组数字,并将其写入txt文档中
- 小白写linux环境下的定时监测
- 理解 Delphi 的类(十) - 深入方法[21] - 开放数组参数
- Java中static的用法,初始化块
- 世上哪有那么多的怀才不遇
- 中国的程序员培训是不是有问题
- 程序员的工资到底花到哪里去了?
- 泰勒公式(泰勒展开式,泰勒中值定理)使用基本技巧
- 校招-蘑菇街,阿里面试总结
- 清华计算机系科学博士毕业论文要求,博士可以不发SCI毕业?清华取消博士论文发表强制要求...
- Web UI自动化中使用cookies登录
- sap fi清账函数POSTING_INTERFACE*的使用
热门文章
- 【免费毕设】php+mysql社区交流系统(毕业论文+系统+说明书)
- java中static_认识java中的static
- IT专业沦为新时代农民工?为什么你身边的人都不让你报计算机专业?
- 计算机中专自考,中专怎么自考大专
- mysql select大全_Mysql select 大全
- 1971旗舰cpu intel_Intel 酷睿i7 9700F搭配影驰GeForce RTX 2060大将
- discuz中写一个表单,数据存入到数据库中,再从数据库读出来显示在列表中
- 百度云盘免下载百度云盘全速下载方法
- 【Linux文件系统监控的Java类库 inotify-java】
- C# 使用摄像头拍照 支持Win7 64位