简介

pyppeteer 是非官方 Python 版本的 Puppeteer 库,浏览器自动化库,由日本工程师开发。

Puppeteer 是 Google 基于 Node.js 开发的工具,调用 Chrome 的 API,通过 JavaScript 代码来操纵 Chrome 完成一些操作,用于网络爬虫、Web 程序自动测试等。

pyppeteer 使用了 Python 异步协程库 asyncio,可整合 Scrapy 进行分布式爬虫。

pyppeteer维护得不好;puppet 木偶;puppeteer 操纵木偶的人。

安装

  1. 安装 pyppeteer
pip install pyppeteer

2.安装 Chromium

pyppeteer-install

注意:首次运行pyppeteer会自动下载Chromium(Chrome的实验版,约150MB)

若 Chromium 安装失败,可手动下载

3.查看 Chromium 存放路径

import pyppeteer print(pyppeteer.__chromium_revision__) # 查看版本号

print(pyppeteer.executablePath()) # 查看 Chromium 存放路径

# 588429

# C:\Users\Administrator\AppData\Local\pyppeteer\pyppeteer\local-chromium\588429\chrome-win32\chrome.exe

解压到:C:\Users\Administrator\AppData\Local\pyppeteer\pyppeteer\local-chromium\588429\ 下

将文件夹 chrome-win 重命名为 chrome-win32 即可

配置详情查看 Pyppeteer Environment Variables

初试

打开百度并截图

import asyncio
from pyppeteer import launchasync def main():browser = await launch(headless=False)  # 关闭无头浏览器page = await browser.newPage()await page.goto('https://www.baidu.com/') # 跳转await page.screenshot({'path': 'example.png'})  # 截图await browser.close() # 关闭asyncio.get_event_loop().run_until_complete(main())

指定浏览器路径

指定参数 executablePath

import asyncio
from pyppeteer import launchasync def main():browser = await launch(headless=False, executablePath=r'C:\Users\Administrator\AppData\Local\pyppeteer\pyppeteer\local-chromium\588429\chrome-win32\chrome.exe')  # 关闭无头浏览器page = await browser.newPage()await page.goto('https://www.baidu.com/') # 跳转await page.screenshot({'path': 'example.png'}) # 截图await browser.close()  # 关闭asyncio.get_event_loop().run_until_complete(main())

移除Chrome正受到自动测试软件的控制

import asyncio
from pyppeteer import launchasync def main():browser = await launch(headless=False, ignoreDefaultArgs=['--enable-automation']input()await browser.close()asyncio.get_event_loop().run_until_complete(main())

全屏

import tkinter
import asyncio
from pyppeteer import launchdef screen_size():tk = tkinter.Tk()width = tk.winfo_screenwidth()height = tk.winfo_screenheight()tk.quit()return {'width': width, 'height': height}async def main():browser = await launch(headless=False, args=['--start-maximized']) # 页面全屏page = await browser.newPage()await page.setViewport(screen_size()) # 内容全屏await page.goto('https://www.baidu.com/')input()await browser.close()asyncio.get_event_loop().run_until_complete(main())

页面内容

Page.content() 或 Page.evaluate()

import asyncio
from pyppeteer import launchasync def main():browser = await launch(headless=False)page = await browser.newPage()url = 'https://www.baidu.com/'await page.goto(url)# content = await page.content()content = await page.evaluate('document.body.textContent', force_expr=True)print(content)input()await browser.close()asyncio.get_event_loop().run_until_complete(main())

异步运行

asyncio.wait() 或 asyncio.gather(),建议只用在一次性读取的页面,需要滚动的不建议使用

import asyncio
from pyppeteer import launchasync def crawl(url):browser = await launch(headless=False)page = await browser.newPage()await page.goto(url)title= await page.title()print(title)print(title)await browser.close()async def main():urls = [crawl('https://www.baidu.com/'),crawl('https://www.bing.com/')]await asyncio.wait(urls)# await asncio.gather(*urls)asyncio.get_event_loop().run_until_complete(main())
# 百度一下,你就知道
# 微软 Bing 搜索 - 国内版

报错 OSError: Unable to remove Temporary User Data

启动浏览器时指定参数userDataDir存放缓存,保证硬盘大且不是系统盘

import asyncio
from pyppeteer import launchasync def main():browser = await launch(headless=False, userDataDir='./cache/')input()await browser.close()asyncio.get_event_loop().run_until_complete(main())

报错 pyppeteer.errors.TimeoutError: Navigation Timeout Exceeded: 30000 ms exceeded.

封装

import asyncio
from pyppeteer import launchasync def main():browser = await launch(headless=False, ignoreDefaultArgs=['--enable-automation'], userDataDir='./cache/') #page = await browser.newPage()await page.setViewport({'width': 1366, 'height': 768})  # 内容铺满await page.goto('https://www.baidu.com/') # 跳转input('回车退出')await browser.close()asyncio.get_event_loop().run_until_complete(main())

参考文献

  1. pyppeteer/pyppeteer: Headless chrome/chromium automation library
  2. Pyppeteer Documentation
  3. Chromium - The Chromium Projects
  4. Pyppeteer Environment Variables
  5. pyppeteer的环境搭建,常见参数及2个案例
  6. pyppeteer使用遇到的bug及解决方法
  7. pyppeteer 爬取京东商城和淘宝示例代码|获取cookie爬取搜索内容
  8. pyppeteer教程
  9. pyppeteer: 解决OSError: Unable to remove Temporary User Data的报错问题
  10. 解决pyppeteer导航超时问题: pyppeteer.errors.TimeoutError: Navigation Timeout Exceeded: 30000 ms exceeded.
  11. python异步编程之asyncio(百万并发)
  12. Python 异步编程入门

Python爬虫神器pyppeteer相关推荐

  1. Python爬虫神器pyppeteer,对 js 加密降维打击

    爬虫神器pyppeteer,对 js 加密降维打击 pyppeteer 是对无头浏览器  puppeteer 的 Python 封装.无头浏览器广泛用于自动化测试,同时也是一种很好地爬虫思路. 使用 ...

  2. 基于浏览器的python爬虫神器pyppeteer介绍及入门

    简介 在讲 python 的 pyppeteer 前,先来说下 Node 的 puppeteer 库: puppeteer的中文意思是:操纵木偶的人,木偶师. 那么 Node 的 puppeteer ...

  3. python contains类似函数_五步教会你用python爬虫神器PyQuery!(内含详细步骤和代码)...

    前言: 今天为大家带来的内容,是五步教会你用python爬虫神器PyQuery!(内含详细步骤和代码),在这里还是要啰嗦下,为了有更好的观赏性,大部分代码用图片的方式呈现出来!喜欢的话不忘点赞关注不迷 ...

  4. 5分钟学会Python爬虫神器autoscraper——自动化爬虫必备

    5分钟学会Python爬虫神器autoscraper--自动化爬虫必备 爬虫神器autoscraper介绍 安装 使用 批量抓取 查看结果 爬虫神器autoscraper介绍 今天给大家介绍一个非常智 ...

  5. Python爬虫之pyppeteer的使用(爬虫、获取cookie、截屏插件、防爬绕过)

    官方帮助: https://pyppeteer.github.io/pyppeteer/reference.html 下载文本中的网页源码,由于需要向下拉动滚动条所以使用pyppeteer渲染网页,并 ...

  6. 以视频爬取实例讲解Python爬虫神器Beautiful Soup用法

    1.安装BeautifulSoup4 easy_install安装方式,easy_install需要提前安装 1 easy_install beautifulsoup4 pip安装方式,pip也需要提 ...

  7. 一款懒人必备的Python爬虫神器

    前言 今天把最近的一个应用做好了,测试了一下运行没有问题,剩下的就是检验一下结果如何.从光谱到Lab值通常使用matlab中的roo2lab(),不过经过我最近的测试发现转换的结果并不理想,而且这个转 ...

  8. python 福利_发现一个舔狗福利!这个Python爬虫神器太爽了,自动下载妹子图片!...

    对于Python的自动化测试或者是爬虫开发者来说,对于selenium库想必都听说过,selenium本身是作为Web应用测试工具,但是作为爬虫工具也有很广泛的用途. Selenium虽然好用,但是它 ...

  9. 爬虫神器 Pyppeteer 介绍及爬取某商城实战!

    提起 selenium 想必大家都不陌生,作为一款知名的 Web 自动化测试框架,selenium 支持多款主流浏览器,提供了功能丰富的API 接口,经常被我们用作爬虫工具来使用. 但是 seleni ...

最新文章

  1. oracle 12C(12.2.0.1)安装-plm系统(一)
  2. pytorch笔记 torch.clamp(截取上下限)
  3. 应云而生,幽灵的威胁 - 云原生应用交付与运维的思考
  4. segment fault
  5. APP运营如何找到精准用户,提升品牌知名度
  6. Docker Java+Tomcat 环境搭建
  7. enum与int、String之间的转换
  8. 冒泡排序法:一维数组 (最费内存资源的排序法)
  9. 找零兑换(递归解法)
  10. IOS AppUI规格指南
  11. linux内核的配置过程,linux内核的配置机制及其编译过程
  12. Visual C#中父窗口和子窗口之间实现控件互操作
  13. 树莓派之安装dlna服务
  14. PADS(4)——PADS Logic原理图设计技巧
  15. 半导体芯片行业的运作模式(IDM/Fabless/Foundry模式)
  16. Electronic Commerce 12th Gary Schneider
  17. RN通信底层原理 -- 总结篇
  18. 三分频电路Verilog设计
  19. Log4cplus编译
  20. 【图像分割】基于布谷鸟算法实现二维Tsallis熵、kapur、oust多阈值图像分割附matlab代码

热门文章

  1. ES更新嵌套数组(使用Java API)
  2. 00_设计模式6大原则
  3. ES6对象(3):类的继承
  4. xp系统怎么关dhcp服务器,怎样解决Win XP操作系统DHCP故障:获取未使用的IP地址
  5. 回调java 简书_web3j函数回调使用详解
  6. MongoDB数据库(了解MongoDB及基础命令,备份数据库)
  7. Linux简介之——目录与文件管理
  8. 关于 $ Super $ $ 和 $ Sub $ $ 的用法
  9. OBD技术速成——J1850协议解析软件实现
  10. server2008 sql 账号只读权限_SQL Server 2008数据库创建用户只读权限的两种方式(转载)...