我猜,只是猜,每个人的一生都会遇见某些人,喜欢上她。有些人在合适的时间里遇到,就像是在春天遇到花开,所以一切都很好,他们会相恋、订婚、结婚、一起生活。而有的人在错误的时间遇到 ,就像是在冬天,隔着冰看见浮上来换气的鱼,所以只能看着,鱼换完气,沉到水下去,就看不见了,再也没有后续。但是我们能说在春天遇到花是对的,而在冬天遇到鱼是错的么?在错误的时间里遇到,就能克制自己不喜欢那个人么?是不是仍然会用尽了力气想去接近,想尽办法掩饰自己,甚至伪装成另外一条鱼。

PYPPETEER

你可以将puppeteer理解为selenium的升级版本,运行效率和简单易用性都胜于selenium,虽然只支持chorme浏览器,但是作为google开源的产品,支持自家的浏览器做法也无可厚非。

pyppeteer可以理解成使用python将puppeteer的api进行封装打包,更加便于是使用。

由于 Pyppeteer 是基于 asyncio 构建的,它的所有 属性 和方法 几乎都是 coroutine (协程) 对象,因此在构建异步程序的时候非常方便,天生就支持异步运行。

依赖环境

  1. asyncio,意味着必须要使用python3.5+以上的版本
  2. chromeium,可以理解成chrome的实验版

安装

使用pip即可安装

pip3 install puppeteer

安装完后,在python目录的script目录下有 pyppeteer-install.exe 和 pyppeteer-install-script.py 两个文件,这两个文件的功能为:下载chromeium到pyppeteer的默认位置。

运行代码:

python3 pyppeteer-install-script.py

下载好后,打开cmd,进入python3环境,输入

import pyppeteer

如无报错,则说明安装成功。就是如此的简便易用。

快速上手

打开网页

# -*- coding:utf-8 -*-
import asyncio
from pyppeteer import launch
async def open_baidu():
    browser = await launch(headless=False)
    # 如果不加上headless参数,则会启动一个无头浏览器
    page = await browser.newPage()
    await page.goto('https://sxadmin.github.io')
    await browser.close()
asyncio.get_event_loop().run_until_complete(open_baidu())

获取网页源码

async def open_baidu():
    browser = await launch()
    # 生成pdf,必须要用无头浏览器
    page = await browser.newPage()
    await page.goto('https://sxadmin.github.io')
    print(await page.content())
    await browser.close()
asyncio.get_event_loop().run_until_complete(open_baidu())

网页截图

import asyncio
from pyppeteer import launch
import time
async def open_baidu():
    browser = await launch(headless=False)
    # 如果不加上headless参数,则会启动一个无头浏览器
    page = await browser.newPage()
    await page.goto('https://sxadmin.github.io')
    time.sleep(3)
    await page.screenshot({'path':'../截图.jpg'})
    await browser.close()
asyncio.get_event_loop().run_until_complete(open_baidu())

运行后,将会在上一层目录下生成截图

生成pdf文件

# -*- coding:utf-8 -*-
import asyncio
from pyppeteer import launch
import time
async def open_baidu():
    browser = await launch()
    # 生成pdf,必须要用无头浏览器
    page = await browser.newPage()
    await page.goto('https://sxadmin.github.io')
    await page.pdf({'path':'11.pdf'})
    await browser.close()
asyncio.get_event_loop().run_until_complete(open_baidu())

参数设置

  1. 防止打开多个页面出现卡死

    browser = await launch({'headless': False, 'args': ['--no-sandbox'], 'dumpio': True})
  2. 将打开页面铺满浏览器

browser = await launch(
    {
        'headless': False, 
        'dumpio': True, 
        'autoClose': False, 
        'args': [
            '--no-sandbox', 
            '--window-size=1366,850'
        ]
    }
)
await page.setViewport({'width': 1366, 'height': 768})
  1. 超时设置

    await page.goto(‘https://www.sxadmin.github.io',{"timeout":100000})

参考链接

pyppeteer入门

pyppeteer性能优化

中文手册