pyppeteer的基本使用

API 介绍

启动器
  • pyppeteer.launcher.launch()
    启动 Chrome 进程并返回浏览器实例

参数:

参数

类型

解释

ignoreHTTPSErrors

bool

是否忽略 HTTPS 错误。默认为 False

headless

bool

无头模式下运行浏览器。默认为 True 除非 appModedevtools 选项 True

executablePath

str

运行 Chromium 或 Chrome 可执行文件的路径,而不是默认捆绑的 Chromium

slowMo

int或float

按指定的毫秒数减慢 pyppeteer 操作。

args

List [str]

传递给浏览器进程的附加参数(标志)。

dumpio

bool

是否管道浏览器进程 stdout 和 stderr 进入 process.stdoutprocess.stderr。默认为 False。

userDataDir

str

用户数据目录的路径

env

dict

指定浏览器可见的环境变量。默认与 python 进程相同。

devtools

bool

为每个选项卡自动打开 DevTools 面板。如果是此选项 Trueheadless 则将设置该选项 False

logLevel

int或str

用于打印日志的日志级别。默认值与根记录器相同。

autoClose

bool

脚本完成时自动关闭浏览器进程。默认为 True

loop

asyncio.AbstractEventLoop

事件循环(实验)。

使用注意:

参数

注意

ignoreHTTPSErrors

不解释

headless

不解释

executablePath

默认的路径就行

slowMo

一般要加这个参数

args

常用的有[’–no-sandbox’,’–disable-gpu’, ‘–disable-setuid-sandbox’,’–window-size=1440x900’]

dumpio

不加 dumpio=True 有时会出现浏览器卡顿

userDataDir

保留 cookie等数据,可以达到免登录,而这个参数没什么用

env

看需要

devtools

看需要

logLevel

无用

autoClose

默认就好,不过如果你需要保持浏览器状态,可以不关闭,下次直接连接这个已存在的浏览器

loop

看需要

  • pyppeteer.launcher.connect() 连接到现有的 Chrome

参数:

参数

类型

解释

browserWSEndpoint

str

要连接的浏览器 WebSocket 端点。(必填

ignoreHTTPSErrors

bool

是否忽略 HTTPS 错误。默认为 False

slowMo

int或float

按指定的毫秒数减慢 pyppeteer 的速度。

logLevel

int或str

用于打印日志的日志级别。默认值与根记录器相同

loop

asyncio.AbstractEventLoop

事件循环(实验

使用注意:

browserWSEndpoint:格式是 ws://${host}:${port}/devtools/browser/<id>。
浏览器的 wsEndpoint 这个值,可以通过  
brower = pyppeteer.launcher.launch()
dev = brower. wsEndpoint
来获取,保存这个值就可以下次启动了
  • pyppeteer.launcher.executablePath() 获取默认 Chrome 的可执行路径
浏览器类
  • pyppeteer.browser.Browser() 这个类是由 launch()返回的实例

参数

解释

_contexts

返回所有打开的浏览器上下文的列表,在新创建的浏览器中,这将返回单个实例

close()

关闭连接并终止浏览器进程

createIncognitoBrowserContext()

创建一个新的隐身浏览器上下文。这不会与其他浏览器上下文共享 cookie /缓存

disconnect()

断开浏览器

newPage()

在此浏览器上创建新页面并返回其对象

pages()

获取此浏览器的所有页面。返回格式为列表,包含所有页面

process

返回此浏览器的进程

target()

获取浏览器中所有活动目标的列表

userAgent()

返回浏览器的原始 UA

version()

获取浏览器的版本

wsEndpoint

返回 WebSocket 端点 url

页面类
  • pyppeteer.page.Page() 由 brower.newPage()或者 brower.pages()得到
  • J():别名 querySelector(),看名字就知道通过 CSS 选择器来选出元素
  • JJ(): 别名 querySelectorAll()
  • Jeval(): 功能比 page.J()功能多一点,可以选出网页文本或者属性指
  • JJeval(): querySelectorAllEval()
  • Jx(): 别名 xpath()
  • addScriptTag(): 将脚本标记添加到此页面, 返回 ElementHandle其中一个 url,path 或 content 选择是必要的。

参数

类型

解释

url

字符串

要添加的脚本的 URL。

path

字符串

content

字符串

要添加的 JavaScript 字符串。

type

字符串

脚本类型。使用 module 以加载一个 JavaScript ES6 模块。

  • coroutine addStyleTag(): 将样式或链接标记添加到此页面, 返回 ElementHandle
    其中一个 urlpathcontent 选择是必要的。

参数

类型

解释

url

字符串

要添加的链接标记的 URL。

path

字符串

要添加的本地 CSS 文件的路径

content

字符串

要添加的 CSS 字符串

  • authenticate(): 提供 http 身份验证的凭据
  • bringToFront(): 将页面置于前面
  • browser: 获取该页面所属的浏览器
  • click(): 相当于鼠标左键单击匹配的元素,参数是 CSS 选择器的字符串。如果没有匹配到元素,则会引发 PageError

参数

类型

解释

button

str

left,right 或 middle,默认为 left。

clickCount

int

默认为 1。

delay

int或float

等待时间 mousedown 和 mouseup 以毫秒为单位的时间。默认为 0。

  • close(): 关闭此页面
  • content(): 获取页面的完整 HTML 内容
  • cookies(): 获取 cookie。参数为 URL,如果未指定 URL,则此方法返回当前页面 URL 的 cookie。如果指定了 URL,则仅返回这些 URL 的 cookie
  • coverage: 返回 coverage
  • deleteCookie(): 删除 cookie,参数为 cookie 字段参数,比如 name、url、domain、path 等
  • emulate(): 模拟给定的设备指标和用户代理。相当于同时设置了 setUserAgent()、setViewport()
  • emulateMedia(): 模拟页面的 CSS 媒体类型。参数为:screen、print、None。
  • evaluate(): 在浏览器上执行 js 并获取结果
  • evaluateHandle(): 同上,只是会返回一个值。
  • evaluateOnNewDocument(): 也是执行 js,在页面跳转时执行
  • exposeFunction(): 将 python 函数添加到浏览器的 window 对象中 name。
  • focus(): 聚焦匹配的元素。如果不存在,抛出 PageError
  • frames:获取此页面的所有 frame
  • goBack():返回上一个网页。如果不存在,则返回 None
  • goForward(): 跳转到下一页。如果不存在,则返回 None
  • goto(): 访问某个 URL

参数

解释

url

-

timeout

-

waitUntil

等待访问成功,参数需要另外指定

  • hover(): 鼠标悬停匹配的元素
  • isClosed(): 判断页面是否关闭
  • keyboard: 获取 keyboard 对象
  • mainFrame: 获取 frame 页面的主要内容
  • metrics(): 获取页面中的信息
  • mouse: 获取 mouse 对象
  • reload(): 刷新网页
  • screenshot(): 截图

参数

类型

解释

path

str

保存图像的文件路径。屏幕截图类型将从文件扩展名中推断出来。

type

str

指定屏幕截图类型,可以是 jpeg 或 png。默认为 png。

quality

int

图像的质量,在 0-100 之间。不适用于 png 图像

fullPage

bool

如果为 true,请截取完整的可滚动页面。默认为 False。

clip

字典

指定页面剪切区域的对象。有参数x,y,width,height

omitBackground

bool

隐藏默认的白色背景并允许捕获具有透明度的屏幕截图。

encoding

str

图像的编码可以是 base64binary。默认为 binary

  • select(): 选择选项并返回所选值。如果未找到元素,抛出 ElementHandleError。
  • setCacheEnabled(): 为每个请求启用/禁用缓存。默认启用
  • setContent(): 将 HTML 加到网页
  • setCookie(): 设置 cookie
  • setDefaultNavigationTimeout(): 更改默认的最大导航超时。默认 30 秒
  • setJavaScriptEnabled(): 设置 JavaScript 启用/禁用
  • setExtraHTTPHeaders(): 设置默认 headers 头,值为一个字典
  • setRequestInterception(): 启用/禁用请求拦截。配合 page.on()
  • setUserAgent(): 设置要在此页面中使用的 UA
  • setViewport(): 设置窗口大小。

参数

类型

解释

width

int

以像素为单位的页面宽度。

height

int

以像素为单位的页面高度

deviceScaleFactor

float

默认为 1.0

isMobile

float

默认为 False

hasTouch

bool

默认为 False

isLandscape

bool

默认为 False

  • tap(): 点击与之匹配的元素
  • title(): 获取页面标签
  • tracing:获取 tracing 对象
  • type(): 往输入框中输入内容,第一个参数为 CSS 选择器,第二个为文本内容
  • url:获取此页面的 url
  • waitFor(): 等待页面上匹配的函数,超时或元素。参数可以是 int 或者 float,单位毫秒。也可以是 CSS 选择器
  • waitForNavigation(): 等到网页跳转
  • waitForRequest(): 等待请求
  • waitForResponse(): 等待回应
  • waitForSelector(): 等到页面上出现匹配的元素。其实 waitFor()也有同样功能。
  • waitForFunction(): 等到函数完成并返回一个值
  • waitForXPath(): 等到 xpath 页面上出现匹配的元素
  • workers: 获取页面的所有 worker。
  • xpath(): xpath页面寻找
worker 类
  • page.on(‘workercreated’, 函数) 这个函数传入的参数就是 worker 类
  • evaluate(): 同上
  • evaluateHandle():同上
  • executionContext():同上
  • url: 同上
键盘类
  • down(): 如果没有参数,则是按下鼠标左键。如果是键盘的某个值比如 shift、A 等键,则是相当于按下这些键。
  • press(): 同 down(),但是上面是不会释放鼠标或者键盘,需要调用 up 方法释放鼠标。
  • sendCharacter:将字符发送到页面。
  • type(): 同上
  • up(): 释放由 down 按下的键或者鼠标
鼠标类
  • click(): 按下(x, y)处的按钮

参数

类型

解释

button

STR

left(左键)、right(右键)或 middle(中键),默认为 left

clickCount

int

默认为 1。

delay

int或float

等待时间 mousedownmouseup 以毫秒为单位的时间。默认为 0

  • down(): 同上
  • move(): 移动鼠标光标。
  • up(): 同上
tracing 类

创建可在 Chrome DevTools 或时间线查看器打开的跟踪文件 ,使用如下

await page.tracing.start({'path': 'trace.json'})

await page.goto('https://www.google.com')

await page.tracing.stop()
  • start(): 开始跟踪
  • stop(): 停止跟踪
Dialog类

page.on( 'dialog', 函数),函数的参数就是这个类

  • accept(): 接受对话框
  • defaultValue: 如果对话框提示,则获取默认提示值
  • dismiss(): 关闭对话框
  • message: 获取对话框消息
  • type: 获取对话框类型。类型有:alertbeforeunloadconfirm,或 prompt
frame 类
  • isDetached(): 如果此框架已分离,则返回 True
  • name:获取 frame 的名称,如果没有则返回 ID
  • parentFrame:获取父框架

frme类和page基本相同 一般使用page

ElementHandle 类

参数

解释

J()

-

JJ()

-

JJeval()

-

asElement

-

boundingBox()

返回此元素的边界框,如果元素不可见,则返回 None

boxModel()

返回元素框

click()

-

contentFrame()

返回元素句柄的 frame

focus()

-

hover()

-

isIntersectingViewport()

如果元素在视口中可见,则返回 True

press()

-

screenshot()

-

tap()

-

type()

-

uploadFile()

上传文件

request 类
  • page.on(‘request’, 函数) 这个函数传入的参数就是 request 类
  • abort(): 中断请求
  • continue_(): 使用可选的请求覆盖继续请求

参数

类型

解释

url

str

如果设置,请求 URL 将被更改。

method

str

如果设置,则更改请求方法(例如 GET)。

postData

str

如果设置,则更改发布数据或请求。

headers

dict

如果设置,则更改请求 HTTP 标头

  • failure(): 返回错误文本
  • frame : 返回匹配的 frame 对象
  • headers: 返回此请求的 HTTP 标头字典
  • method:返回此请求的方法
  • postData: 返回此请求的子正文
  • redirectChain: request 类重定向的所有请求
  • resourceType:渲染引擎感知的此请求的资源类型
  • respond(): 通过给定的参数修改请求

参数

类型

解释

status

int

响应状态代码,默认为 200。

headers

dict

可选的响应头。

contentType

str

如果设置,则等于设置Content-Type 响应头

body

str或bytes

可选的响应主体

  • response(): 返回匹配的 response 对象
  • url: 此请求的 URL
response 类

参数

解释

buffer()

返回相应的字节内容

fromCache

如果响应是从缓存提供的,则返回 True。缓存可能是浏览器的磁盘缓存或者内存,而不是服务器响应的

fromServiceWorker

如果响应由服务器提供,则返回 True

headers

返回此响应的 HTTP 标头字典

json()

获取响应正文的 JSON

ok

返回 bool 此请求是否成功

request

获取匹配的 request 对象

securityDetails

返回与此响应关联的安全详细信息

status

响应的状态代码

text()

获取响应正文的文本

url

响应的 URL

target 类

参数

解释

browser

获取目标所属的浏览器

browserContext

返回目标所属的浏览器上下文

createCDPSession()

创建附加到目标的 Chrome Devtools 协议会话

opener

获取打开此目标的目标

page()

获取此目标的页面

type

获取此目标的类型

url

获取此目标的网址

Debugging

对于调试,您可以设置 for 和 功能 logLevel 选项。但是,此选项会打印太多日志,包括 pyppeteer 的 SEND / RECV 消息。为了只显示被抑制的错误消息,您应该设置 logging.DEBUG 为 True

mport asyncio
import pyppeteer
from pyppeteer import launch

pyppeteer.DEBUG = True  # 在此处设置

async def main():
    browser = await launch()
    
asyncio.get_event_loop().run_until_complete(main())