Puppeter是一个JavaScript库,它提供了一个高级API来通过DevTools协议或WebDriver BiDi控制Chrome或Firefox。默认情况下,Puppeteer在无头(无可见UI)中运行。

仓库地址:https:///puppeteer/puppeteer

最原始仓库: https:///GoogleChrome/puppeteer

https://www.npmjs.com/package/puppeteer

与它配合的还有一个expect-puppeteer:https://www.npmjs.com/package/expect-puppeteer


还有他的python支持工具pyppeteer

https://pypi.org/project/pyppeteer/

Installation

pyppeteer requires Python >= 3.8

Install with pip from PyPI:

pip install pyppeteer

Or install the latest version from this github repo:

pip install -U git+https:///pyppeteer/pyppeteer@dev


puppeteer的安装和使用

npm i puppeteer # Downloads compatible Chrome during installation.
npm i puppeteer-core # Alternatively, install as a library, without downloading Chrome.
import puppeteer from 'puppeteer';
// Or import puppeteer from 'puppeteer-core';

// Launch the browser and open a new blank page
const browser = await puppeteer.launch();
const page = await browser.newPage();

// Navigate the page to a URL.
await page.goto('https:///');

// Set screen size.
await page.setViewport({width: 1080, height: 1024});

// Type into search box.
await page.locator('.devsite-search-field').fill('automate beyond recorder');

// Wait and click on first result.
await page.locator('.devsite-result-item-link').click();

// Locate the full title with a unique string.
const textSelector = await page
  .locator('text/Customize and automate')
  .waitHandle();
const fullTitle = await textSelector?.evaluate(el => el.textContent);

// Print the full title.
console.log('The title of this blog post is "%s".', fullTitle);

await browser.close();


pyppeteer的安装和使用

Examples

Open web page and take a screenshot:

import asyncio
from pyppeteer import launch

async def main():
    browser = await launch()
    page = await browser.newPage()
    await page.goto('https://example.com')
    await page.screenshot({'path': 'example.png'})
    await browser.close()

asyncio.get_event_loop().run_until_complete(main())

Evaluate javascript on a page:

import asyncio
from pyppeteer import launch

async def main():
    browser = await launch()
    page = await browser.newPage()
    await page.goto('https://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())