前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一周一技 | 不注入JS怎么防止Pyppeteer被反爬?

一周一技 | 不注入JS怎么防止Pyppeteer被反爬?

作者头像
咸鱼学Python
发布2019-08-20 12:06:42
5.7K2
发布2019-08-20 12:06:42
举报
文章被收录于专栏:咸鱼学Python咸鱼学Python
摄影:产品经理

厨师: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打开浏览器窗口:

代码语言:javascript
复制
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/(这是我写的爬虫练习网站,大家可以用这个网站练习爬虫开发,里面有几道题挺难^_^)

网上的代码,无外乎注入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了,不再需要修改源代码了。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 咸鱼学Python 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档