了解使用Pyppeteer

1.Pyppeteer的来源

如果大家对 Python 爬虫有所了解的话,想必你应该听说过 Selenium 这个库,这实际上是一个自动化测试工具.但是其环境配置的麻烦就不用我多说了.

 Pyppeteer,不是 Puppeteer。它是 Puppeteer 的 Python 版本的实现,但他不是 Google 开发的,是一位来自于日本的工程师依据 Puppeteer 的一些功能开发出来的非官方版本。

在 Pyppetter 中,实际上它背后也是有一个类似 Chrome 浏览器的 Chromium 浏览器在执行一些动作进行网页渲染.

2.Pyppeteer的几种基本用法

pyppeteer github 地址:https://github.com/miyakogi/pyppeteer

2.1设置网页格式

了解使用Pyppeteer
driver = await launch({
        # 谷歌浏览器的安装路径
        'executablePath': 'C:\Program Files\Google\Chrome\Application\chrome.exe',
        # Pyppeteer 默认使用的是无头浏览器
        'headless': False,
        # 设置Windows-size和Viewport大小来实现网页完整显示
        'args': ['--no-sandbox', '--window-size=1024,768']
    })
code1

2.2打开你所需要的网站

了解使用Pyppeteer
page = await driver.newPage()
await page.goto(url)
code2

2.3通过选择器进行操作

了解使用Pyppeteer
await page.type(选择器信息,内容,时间)
#await page.type('#q4','20183769')
await page.click(选择器信息)
#await page.click('#divquestion3 > ul > li > a')
test=await page.querySelector(选择器信息)
await test.click()
#date=await page.querySelector('#q1')
#await date.click()
code3

2.4通过xpath 定位/操作

了解使用Pyppeteer
click_handle = await page.xpath("xpath路径")
await click_handle[0].click()
code4

2.5定位转换frame

了解使用Pyppeteer
date = await page.querySelector('#q2')
    await date.click()
    frame = page.frames#获取所有的frame
    date2 = await frame[1].querySelector('#selectTodayButton')
    await date2.click()
code5

2.6获取所有页面

了解使用Pyppeteer
page_list = await driver.pages()
await page_list[-1].content() 
code6

3.Pyppeteer几种常用类

浏览器类

pyppeteer.browser.Browser()
这个类是由launch()返回的实例

  • browserContexts: 返回所有打开的浏览器上下文的列表,在新创建的浏览器中,这将返回单个实例
  • coroutine close(): 关闭连接并终止浏览器进程
  • coroutine createIncognitoBrowserContext(): 创建一个新的隐身浏览器上下文。这不会与其他浏览器上下文共享cookie /缓存
  • coroutine disconnect(): 断开浏览器
  • coroutine newPage(): 在此浏览器上创建新页面并返回其对象
  • coroutine pages(): 获取此浏览器的所有页面。返回格式为列表,包含所有页面
  • process:返回此浏览器的进程
  • target(): 获取浏览器中所有活动目标的列表
  • coroutine userAgent():返回浏览器的原始UA
  • coroutine version(): 获取浏览器的版本
  • wsEndpoint: 返回websocket端点url

 键盘类

  • coroutine down(): 如果没有参数,则是按下鼠标左键。如果是键盘的某个值比如shift、A等键,则是相当于按下这些键。
  • coroutine press(): 同down(),但是上面是不会释放鼠标或者键盘,需要调用up方法释放鼠标。
  • coroutine sendCharacter:将字符发送到页面。没用过
  • coroutine type(): 同上
  • coroutine up(): 释放由down按下的键或者鼠标

worker类

page.on(‘workercreated’, 函数) 这个函数传入的参数就是worker类

  • coroutine evaluate(): 同上
  • coroutine evaluateHandle():同上
  • coroutine executionContext():同上
  • url: 同上

Dialog类

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

  • coroutine accept(): 接受对话框
  • defaultValue: 如果对话框提示,则获取默认提示值
  • coroutine dismiss(): 关闭对话框
  • message: 获取对话框消息
  • type: 获取对话框类型。类型有:alertbeforeunloadconfirm,或prompt

frame

 

  • coroutine J():
  • coroutine JJ():
  • coroutine JJeval(): 
  • coroutine Jeval(): 
  • coroutine Jx(): 
  • coroutine addScriptTag(): 
  • coroutine addStyleTag(): 
  • childFrames: 获取子框架
  • coroutine click(): 
  • coroutine content(): 
  • coroutine evaluate(): 
  • coroutine evaluateHandle(): 
  • coroutine executionContext(): 
  • coroutine focus(): 
  • coroutine hover(): 
  • isDetached():如果此框架已分离,则返回True
  • name:获取frame的名称,如果没有则返回ID
  • parentFrame:获取父框架
  • 后面这些属性和page类一模一样

ElementHandle

 

  • coroutine J()
  • coroutine JJ()
  • coroutine JJeval()
  • coroutine Jeval()
  • asElement
  • coroutine boundingBox(): 返回此元素的边界框,如果元素不可见,则返回None
  • coroutine boxModel():返回元素框
  • coroutine click()
  • coroutine contentFrame(): 返回元素句柄的frame
  • coroutine focus()
  • coroutine hover()
  • coroutine isIntersectingViewport(): 如果元素在视口中可见,则返回True
  • coroutine press()
  • coroutine screenshot()
  • coroutine tap()
  • coroutine type()
  • coroutine uploadFile(): 上传文件

 

 

 

frame

  • coroutine J():
  • coroutine JJ():
  • coroutine JJeval(): 
  • coroutine Jeval(): 
  • coroutine Jx(): 
  • coroutine addScriptTag(): 
  • coroutine addStyleTag(): 
  • childFrames: 获取子框架
  • coroutine click(): 
  • coroutine content(): 
  • coroutine evaluate(): 
  • coroutine evaluateHandle(): 
  • coroutine executionContext(): 
  • coroutine focus(): 
  • coroutine hover(): 
  • isDetached():如果此框架已分离,则返回True
  • name:获取frame的名称,如果没有则返回ID
  • parentFrame:获取父框架
    后面这些属性和page类一模一样
上一篇:深入浅出c++协程


下一篇:在 Android 中使用协程(Coroutine)