python爬虫-pyppeteer常用API

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 字符串 要添加的本地 JavaScript 文件的路径。
      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())
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容