Puppeteer是谷歌出品的一款基于Node.js开发的一款工具,主要是用来操纵Chrome浏览器的 API,通过Javascript代码来操纵Chrome浏览器,完成数据爬取、Web程序自动测试等任务。
Puppeteer 默认以 headless 模式运行,但是可以通过修改配置文件运行“有头”模式。
Pyppeteer的两大特点,chromium浏览器和asyncio框架:
github地址:https://github.com/puppeteer/puppeteer/blob/v2.1.1/docs/api.md
中文版教程:https://zhaoqize.github.io/puppeteer-api-zh_CN/
pip install pyppeteer -i https://pypi.douban.com/simple
属性 | 数据类型 | 描述 |
---|---|---|
executablePath | str | chrome.exe运行的路径 |
ignorehttpserrrors | bool | 忽略https错误,默认false |
headless | bool | True 开始无头浏览器 False关闭无头 |
dumpio | bool | 设置True 解决浏览器多开卡死 |
args的参数设置:
属性 | 数据类型 | 描述 |
---|---|---|
–disable-infobars | - | 关闭自动化提示框 |
–window-size=1920,1080 | str | 设置浏览器大小吗,1920是宽,1080是宽 |
–log-level=30 | str | 日志保存等级 |
–start-maximized | - | 窗口最大化模式 |
–proxy-server=http://localhost:1080 | str | 设置代理 |
userDataDir=D:\userData\ | str | 用户文件保存地址 |
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import asyncio
from pyppeteer import launch
async def main():
# 浏览器 启动参数
start_parm = {
# 启动chrome的路径
"executablePath": r"E:\tmp\chrome-win\chrome.exe",
# 关闭无头浏览器 默认是无头启动的
"headless": False,
}
# 创建浏览器对象,可以传入 字典形式参数
browser = await launch(**start_parm)
# 创建一个页面对象, 页面操作在该对象上执行
page = await browser.newPage()
await page.goto('http://www.nows.fun/') # 页面跳转
page_text = await page.content() # 页面内容
print(page_text)
await browser.close() # 关闭浏览器对象
asyncio.get_event_loop().run_until_complete(main()) # 创建异步池并执行main函数。
# !/usr/bin/python
# -*- coding: UTF-8 -*-
import asyncio
import tkinter
from pyppeteer import launcher
# 注意 在导入launch之前先把默认参数改了
# 去除自动化 启动参数
launcher.AUTOMATION_ARGS.remove("--enable-automation")
from pyppeteer import launch
async def main():
# 浏览器 启动参数
start_parm = {
# 启动chrome的路径
"executablePath": r"E:\tmp\chrome-win\chrome.exe",
# 关闭无头浏览器
"headless": False,
"args": [
'--disable-infobars', # 关闭自动化提示框
'--no-sandbox', # 关闭沙盒模式
'--start-maximized', # 窗口最大化模式
],
}
browser = await launch(**start_parm)
page = await browser.newPage()
# 查看当前 桌面视图大小
tk = tkinter.Tk()
width = tk.winfo_screenwidth()
height = tk.winfo_screenheight()
tk.quit()
print(f'设置窗口为:width:{width} height:{height}')
# 设置网页 视图大小
await page.setViewport(viewport={'width': width, 'height': height})
await page.goto('http://www.nows.fun/')
page_text = await page.content()
print(page_text)
await browser.close()
asyncio.get_event_loop().run_until_complete(main())