LoginSignup
40
42

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-05-27

目次

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

40
42
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
40
42