我猜,只是猜,每个人的一生都会遇见某些人,喜欢上她。有些人在合适的时间里遇到,就像是在春天遇到花开,所以一切都很好,他们会相恋、订婚、结婚、一起生活。而有的人在错误的时间遇到 ,就像是在冬天,隔着冰看见浮上来换气的鱼,所以只能看着,鱼换完气,沉到水下去,就看不见了,再也没有后续。但是我们能说在春天遇到花是对的,而在冬天遇到鱼是错的么?在错误的时间里遇到,就能克制自己不喜欢那个人么?是不是仍然会用尽了力气想去接近,想尽办法掩饰自己,甚至伪装成另外一条鱼。
PYPPETEER
你可以将puppeteer理解为selenium的升级版本,运行效率和简单易用性都胜于selenium,虽然只支持chorme浏览器,但是作为google开源的产品,支持自家的浏览器做法也无可厚非。
pyppeteer可以理解成使用python将puppeteer的api进行封装打包,更加便于是使用。
由于 Pyppeteer 是基于 asyncio 构建的,它的所有 属性 和方法 几乎都是 coroutine (协程) 对象,因此在构建异步程序的时候非常方便,天生就支持异步运行。
依赖环境
- asyncio,意味着必须要使用python3.5+以上的版本
- 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())
参数设置
防止打开多个页面出现卡死
browser = await launch({'headless': False, 'args': ['--no-sandbox'], 'dumpio': True})
将打开页面铺满浏览器
browser = await launch(
{
'headless': False,
'dumpio': True,
'autoClose': False,
'args': [
'--no-sandbox',
'--window-size=1366,850'
]
}
)
await page.setViewport({'width': 1366, 'height': 768})
超时设置
await page.goto(‘https://www.sxadmin.github.io',{"timeout":100000})