でスクレイピング - Seleniumなんてもう古い!?・・・Pyppeteerの使い方


目次

Pyppeteerとは

PyppeteerはChromeブラウザを操作するためのPythonパッケージで、node.js用をライブラリPuppeteerをPythonに移植したものです。
Pyppereerの情報は少ないので調べるときはPuppeteerで検索する方がいいかもしれません。

Pyppeteer作者様ブログ
Puppeteerサイト

インストール

pip install pyppeteer

使い方

ブラウザを立ち上げサイトを開く

import asyncio

from pyppeteer import launch

async def main():
    browser = await launch()
    page = await browser.newPage()
    await page.goto('https://google.com')


if __name__ == "__main__":
    asyncio.get_event_loop().run_until_complete(main()) 

上記コマンドを実行するとヘッドレスモードでChroniumが起動し、Googleのサイトを開いてブラウザを閉じます。
初回import時に一回だけchromiumがインストールされます。Pyppeteerでは、デフォルトでヘッドレスモードでブラウザが起動します。

browser = await launch(headless=False)

とする事でブラウザを表示することが出来ます。

要素を取得

# 条件に合った最初の要素を取得
# page.Jでも可能
textbox = await page.querySelector('input[aria-label="検索"]')
textbox = await page.J('input[aria-label="検索"]')

# 条件に合った全ての要素を取得
# page.JJでも可能
buttons = await page.querySelectorAll('input[aria-label="Google 検索"]')
buttons = await page.JJ('input[aria-label="Google 検索"]')

テキストボックスに入力する

# page.type(セレクタ, 入力値)
# 取得したエレメントからでも可能
await page.type('input[aria-label="検索"]', 'pyppeteer')
await textbox.type('pyppeteer')

クリックする

# page.click(セレクタ)
# 取得した要素からでも可能

# Googleの検索ボタンは2番目の要素を選択しなければならないため
# querySelectorAllで取得しなければならない?
await page.click('last-child:input[aria-label="Google 検索"]')
await buttons[1].click()

属性の値を取得する

page.evaluateでjavascriptを実行して取得する。

text = await page.evaluate('elm => elm.getAttribute("name")',textbox)

innerHTMLを取得する

上記と同様

elm = await page.J('#hptl')
text = await page.evaluate('elm => elm.innerHTML', elm)

My Accounts