Pyppetter
Python implementation of puppeteer
Async innately so can have multiple browsers running!
Basic
import asyncio
from pyppeteer import launch
async def main():
browser = await launch(headless=False)
page = await browser.newPage()
await page.goto('http://example.com')
await page.screenshot({'path': 'example.png'})
await browser.close()
asyncio.ensure_future(main())Page Functions To Know
.goto('example.com')
.screenshot({path: 'filename.png'})
.type('#searchbox input', 'Headless Chrome', {delay: 100});
.waitForSelector([someSelector])
.click([someSelector])
Use DOM Manipulation
textContent = await page.evaluate('''() => document.querySelector('p').textContent''');element = await page.querySelector('h1')
title = await page.evaluate('(element) => element.textContent', element)Differences From Puppeteer
Page.querySelector()/Page.querySelectorAll()/Page.xpath() instead ofPage.$()/Page.$$()/Page.$x(). Pyppeteer also has shorthands for these methods, Page.J(), Page.JJ(), and Page.Jx().
Other Example
import asyncio
from pyppeteer import launch
async def main():
browser = await launch()
page = await browser.newPage()
await page.goto('http://example.com')
await page.screenshot({'path': 'example.png'})
dimensions = await page.evaluate('''() => {
return {
width: document.documentElement.clientWidth,
height: document.documentElement.clientHeight,
deviceScaleFactor: window.devicePixelRatio,
}
}''')
print(dimensions)
# >>> {'width': 800, 'height': 600, 'deviceScaleFactor': 1}
await browser.close()
asyncio.get_event_loop().run_until_complete(main())Last updated