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を指定して検索 |
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)
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のコード')
value = driver.execute_script('JavaScriptのコード')