ブラウザを自動操縦

pythonと自動化

  1. HOME
  2. selenium

WEBブラウザを自動操縦するSelenium

seleniumはブラウザの画面を自動でクリックしたり、パラメータを送信したりして、任意の画面を表示し、正しくアプリが実行されたかを確認したり、ページのスクリーンショットを撮ったりできます。

pip install selenium

自身のPCにインストールしているChromeのバージョンを確認しましょう!ヘルプ>GoogleChromeについて
該当するバージョンのChromeDriverをダウンロードし、pythonがインストールされているフォルダに格納します。※パスの通ったフォルダにコピーでもOK!
https://chromedriver.chromium.org/

drlverオブジェクトの要素の検索を行うメソッド

利用するメソッド名 説明
find_element_by_tag_name(タグ名) タグ名を指定して検索
find_element_by_id(ID名) ID属性の値を指定して検索
find_element_by_class_name(クラス名) ckass属性を指定して検索
find_elements_by_css_selector(CSSセレクタ) CSSセレクタで検索
find_element_by_name(name属性) フォーム等で使うname属性を指定して検索
find_element_by_limk_text(テキスト) リンクテキストを指定して検索
find_element_by_partial_link_text(テキスト) リンクテキストの一部を指定して検索
find_element_by_xpath(XPath) XPathを指定して検索
※複数の要素を一気に取得したい場合には、flnd elements 〇〇のような複数形を指定します

Google検索を自動化

Googleのトップベージにあるフォームにキーワードを書き込んで検索する

from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get('https://google.com')

# 検索ボックスを探す
el = driver.find_element_by_name('q')
# キーワードを入力
el.send_keys('ボートレース')
el.submit()

time.sleep(180)  # 3分後に閉じる
driver.close

ヘッドレスモード

Chromeの画面(UI)を表示せずに自動操縦する

# オプション指定
options = webdriver.ChromeOptions()
# オプションでヘッドレスモードを指定
options.add_argument('--headless')
# Chromeを起動
driver = webdriver.Chrome(options=options)

ページ全体のスクリーンショットを撮る

from requests import options
from selenium import webdriver

url = 'サイトURL'
save_file = 'screenshot_full.png'


def screenshot_full(url, save_file):  # メイン処理
    w, h = get_page_size(url)
    screenshot_size(url, save_file, w, h)


def get_page_size(url):  # ページの幅と高さを取得
    driver = webdriver.Chrome()
    driver.get(url)
    w = driver.execute_script("return document.body.scrollWidth;")
    h = driver.execute_script("return document.body.scrollHeight;")
    driver.close()
    print('page_size=', w, h)
    return(w, h)


def screenshot_size(url, save_file, w, h):  # 指定サイズでページを保存
    options = webdriver.ChromeOptions()
    options.add_argument('--headless')
    win_size = 'window-size=' + str(w) + ',' + str(h)
    options.add_argument(win_size)
    # Chromeを起動しページを開いてキャプチャ
    cap_driver = webdriver.Chrome(options=options)
    cap_driver.get(url)
    cap_driver.save_screenshot(save_file)
    cap_driver.close()


if __name__ == '__main__':
    screenshot_full(url, save_file)

Chrome上でJavaScriptを実行する方法

seleniumでは任意のタイミングでJavaScriptを実行できるメソッドがあります。

# JavaScriptを実行して結果を取得
value = driver.execute_script('JavaScriptのコード')