专栏首页未闻Code在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了,不再需要修改源代码了。

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

本文分享自微信公众号 - 未闻Code(itskingname)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-08-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 腾讯云标准网络优化型S2ne云服务器配置CPU内存性能注意事项

    腾讯云标准型服务器是计算、内存和网络资源的均衡,腾讯云百科分享腾讯云标准网络优化型S2ne云服务器配置CPU内存性能注意事项:

    新手站长
  • 携程 Apollo 配置中心传统 .NET 项目集成实践

    可能由于 Apollo 配置中心的客户端源码一直处于更新中,导致其相关文档有些跟不上节奏,部分文档写的不规范,很容易给做对接的新手朋友造成误导。

    Esofar
  • 自定义微信分享链接的图片标题描述等

    使用微信自定义分享,可设置个性化的分享图片、标题、描述等,从而使分享的内容更生动有趣,以获得更好的传播效果。

    许坏
  • CentOS7.6中搭建zabbix监控zabbix4.2

     0.7 2019.05.17 10:26* 字数 372 阅读 489评论 0喜欢 6

    拓荒者
  • ArcPY系列之一(游标)

    数据访问模块 (arcpy.da) 是一个用于处理数据的 Python 模块,是新增的一个模块,与原先的游标什么的相比,这个据说更高效。

    数据处理与分析
  • 图书恐惧症者的福音,Python官方文档使用指北

    很多时候我们并没有耐心去完整学习一本书,因为它耗费时间长,而且不容易牢固掌握知识。更多的情况是,我们想知道某一个函数或者功能的知识。就像是你写作文的时候想知道某...

    HuangWeiAI
  • Go 爬虫之 colly 从入门到不放弃指南

    最近发现知乎上感兴趣的问题越来越少,于是准备聚合下其他平台技术问答,比如 segmentfault、stackoverflow 等。

    波罗学
  • 开发dubbo应用程序(一)入门demo详解

    https://github.com/apache/dubbo-samples/tree/2.6.x

    Dream城堡
  • 初识Promise

    那Promise在js中到底是个什么东西呢?看以下代码,可在浏览器中将其打印出来,如图:

    挥刀北上
  • if 我是前端团队Leader,怎么制定前端协作规范?

    笔者长期单枪匹马在前端领域厮杀(言外之意就是团队就一个人),自己就是规范。随着公司业务的扩展,扩充了一些人员,这时候就要开始考虑协作和编码规范问题了。本文记录了...

    _sx_

扫码关注云+社区

领取腾讯云代金券