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

本文详细介绍了如何使用pyppeteer替代selenium来避免webdriver检测,包括手动安装pyppeteer、调整浏览器设置、执行JS脚本、模拟输入和点击等关键步骤,并给出了绕过检测的实战示例,适合Python爬虫开发者参考。
摘要由CSDN通过智能技术生成

1引言

曾经使用模拟浏览器操作(selenium + webdriver)来写爬虫,但是稍微有点反爬的网站都会对selenium和webdriver进行识别,网站只需要在前端js添加一下判断脚本,很容易就可以判断出是真人访问还是webdriver。虽然也可以通过中间代理的方式进行js注入屏蔽webdriver检测,但是webdriver对浏览器的模拟操作(输入、点击等等)都会留下webdriver的标记,同样会被识别出来,要绕过这种检测,只有重新编译webdriver,麻烦自不必说,难度不是一般大。

作为selenium+webdriver的优秀替代,pyppeteer就是一个很好的选择。

2 手动安装

通过pip使用豆瓣源加速安装pyppeteer:

pip install -i https://pypi.douban.com/simple pypeteer

按照官方手册,先来感受一下:

importasynciofrom pyppeteer importlaunch

asyncdefmain():

browser= await launch(headless=False)

page=await browser.newPage()

await page.goto('http://www.baidu.com/')

await asyncio.sleep(100)

await browser.close()

asyncio.get_event_loop().run_until_complete(main())

pyppeteer第一次运行时,会自动下载chromium浏览器,时间可能会有些长。不过,我第一次运行时,直接报错:

ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1056)

尝试多种方法无果,无奈只能手动下载,但手动下载的方法网上资料也几乎没有,让我来做这个先行者吧。

上面代码运行虽然报错,但是控制台前两行却提供了很有用的信息:

[W:pyppeteer.chromium_downloader] start chromium download.

Download may take a few minutes.

可以看到,下载功能是由pyppeteer.chromium_downloader模块完成的,那么我们进入这个模块查看源码。

在这个模块源码中,我们可以看到downloadURLs、chromiumExecutable等变量,很明显指的就是下载链接和chromium的可执行文件路径。我们重点关注一下可执行文件路径

chromiumExecutable:

chromiumExecutable={'linux': DOWNLOADS_FOLDER / REVISION / 'chrome-linux' / 'chrome','mac': (DOWNLOADS_FOLDER / REVISION / 'chrome-mac' / 'Chromium.app' /

'Contents' / 'MacOS' / 'Chromium'),'win32': DOWNLOADS_FOLDER / REVISION / 'chrome-win32' / 'chrome.exe','win64': DOWNLOADS_FOLDER / REVISION / 'chrome-win32' / 'chrome.exe',

}

可见,无论在哪个平台下,chromiumExecutable都是由是4个部分组成,其中 DOWNLOADS_FOLDER 和 REVISION是定义好的变量:

DOWNLOADS_FOLDER = Path(__pyppeteer_home__) / 'local-chromium'

进一步查看可以发现:

__pyppeteer_home__ = os.environ.get('PYPPETEER_HOME', AppDirs('pyppeteer').user_data_dir)

REVISION= os.environ.get('PYPPETEER_CHROMIUM_REVISION', __chromium_revision__)

所以,DOWNLOADS_FOLDER 和 REVISION都是读取对应环境变量设置好的值,如果没有设置,就使用默认值。我们来输出一下,看看默认值:

importpyppeteer.chromiu

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值