在Pyppeteer中正确隐藏window.navigator.webdriver

简介: 在Pyppeteer中正确隐藏window.navigator.webdriver

摄影:产品经理厨师:kingname

(文末福利)在我以前的一篇文章:一日一技:如何正确移除Selenium中window.navigator.webdriver的值,我讲到了如何在Selenium启动的Chrome中,通过设置启动参数隐藏 window.navigator.webdriver,驳斥了网上垃圾文章中流传的使用JavaScript注入的弊端。

由于Selenium启动的Chrome中,有几十个特征可以被识别,所以在爬虫界已经没有以前那么受欢迎了。模拟浏览器的新秀Puppeteer异军突起,逐渐受到了爬虫界的关注。Puppeteer需要使用JavaScript来控制,如果你是用Python,那么就需要使用Pyppeteer.

如果你使用模拟浏览器爬淘宝,你会发现,无论怎么修改参数,Selenium总是可以立刻被识别。但是如果你使用了本文的方法,用Pyppeteer抓取淘宝,你就会发现另外一个广阔的天地。

今天,我们来讲讲如何在Pyppeteer中隐藏 window.navigator.webdriver

首先,我们使用下面的代码,通过Pyppeteer打开浏览器窗口:

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.goto('http://exercise.kingname.info')
    input('测试完成以后回到这里按下回车...')
    await browser.close()
asyncio.get_event_loop().run_until_complete(main())

代码运行以后,会打开Chrome浏览器,并访问 http://exercise.kingname.info/(这是我写的爬虫练习网站,大家可以用这个网站练习爬虫开发,里面有几道题挺难^_^)

在这个浏览器中,我们打开开发者工具,查询 window.navigator.webdriver会发现它的值为 true。如下图所示:

网上的代码,无外乎注入JavaScript,在网页自带的JavaScript加载之前,提前运行一段JavaScript,修改查询 window.navigator.webdriver的接口。

这种方式每开一个新页面都要执行一次,繁琐,愚蠢!

那么正确的办法是什么呢?

我写这篇文章的时候(2019-08-15),Pyppeteer的最新版本为0.0.25,如下图所示:

此时,你可以在PyCharm中,按住Command键(Windows、Linux用户按住Ctrl键),鼠标左键点击 frompyppeteerimportlaunch中的 launch,自动跳转到Pyppeteer源代码中的 launcher.py文件。

把代码往上翻,在第60行左右,找到如下图方框框住的代码:

--enable-automation这一行注释掉。此时PyCharm会提示你是否修改源代码,选择OK。如下图所示。

修改完成以后的代码如下图所示:

以上就是你需要做的全部修改。

重新运行刚才的代码,你会发现, window.navigator.webdriver已经是 undefined了。如下图所示。

在Pyppeteer即将发布的0.0.26版本的功能里面,我看到了如下图方框框住的一项:

所以,等0.0.26版本发布以后,我们就可以直接通过传递参数来禁用 --enable-automation了,不再需要修改源代码了。


题外话:官方文档和源代码是你的好朋友,如果官方文档找不到你想要的功能,源代码又看不懂,那么就阅读我写的爬虫书吧——学爬虫不走野路子。

为了庆祝本书第4次印刷,我将会从转发并评论了本文的同学中选出3位赠送本书。

目录
打赏
0
0
0
1
13
分享
相关文章
让你爽到飞起的【懒人插件AutoScssStruct4Vue】VSCode根据template的标签目录自动一键生成CSS/SCSS/LESS结构,敏捷开发必备插件!!!
让你爽到飞起的【懒人插件AutoScssStruct4Vue】VSCode根据template的标签目录自动一键生成CSS/SCSS/LESS结构,敏捷开发必备插件!!!
Linux基础命令---mput上传ftp文件
mput 使用lftp登录ftp服务器之后,可以使用put指令将文件上传到服务器。mput指令可以使用通配符,而put指令则不可以。 1、语法 mput [-c] [-d] [-a] [-E] [-O base] files 2、选项列表 -d 穿件与文件...
4458 0
Layui layer 弹出层的使用【笔记】
本文介绍了Layui的layer弹出层组件的使用方法,包括如何通过在线CDN引入Layui的CSS和JS文件,以及如何使用layer.open(options)开启弹出层和layer.close(index)关闭弹出层。文章详细说明了弹出层类型的分类、options选项的参数配置,以及回调函数的使用。通过示例代码,展示了如何创建不同类型的弹出层,包括对话信息框、页面层、内联框架层、加载层和tips层。
使用阿里云KMS产品针对 Springboot 接口参数加密解密功能
针对Springboot里面使用开源工具使用加解密,替换成阿里云KMS产品进行加解密;
1237 2
告别验证码烦恼,轻松完成文字点选验证
文字点选验证码,作为一种创新的验证方式,正在逐渐取代传统的输入文字或数字的验证方式,为用户带来了更简单、直观的验证体验。它通过点击包含特定文字或物体的图片来完成验证,摆脱了繁琐的输入过程,让用户告别验证码的烦恼。
(最新版)如何正确移除Selenium中的 window.navigator.webdriver
(最新版)如何正确移除Selenium中的 window.navigator.webdriver
460 0
Spring Boot拦截器:精细化控制请求与响应
本篇详细介绍了在Spring Boot中使用拦截器的方法。拦截器是一种强大的机制,可用于在请求处理前后进行操作,如鉴权、日志记录等。文章涵盖了创建拦截器类、注册拦截器以及实际应用案例。通过具体的代码示例,读者可以了解如何在项目中配置和使用拦截器,以实现各种功能需求。拦截器为Spring Boot应用增加了更多的灵活性和可扩展性,能够提升应用的安全性和可维护性。
3133 0
Spring Boot拦截器:精细化控制请求与响应
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问