技術をかじる猫

適当に気になった技術や言語、思ったこと考えた事など。

ブラウザを自動操作しよう Selenium

Selenium のインストール

Selenium は昔から結構ブラウザテストに利用されてきているので有名ドコロかもしれません。
ここでは初めてインストールする環境での操作を行っていきます。

事前環境として、Python を入れています。

で、この状況でまずはインストール

% pip install selenium

で、 Chrome にドライバをインストールします。
今回 Mac 使うので、brew 一発ですが、 Windows なら ドライバー要件 :: Seleniumドキュメント から設定します。

ちなみに Windows の場合別口で、 Chocolatey を使う手段もあります。 Chocolatey Software | Selenium All Drivers 4.0

% pip install selenium

コード: 画像取得

ものは試しに画像として取得。
として、selenium_amazon.py としてこんなのを書くと

from selenium import webdriver

options = webdriver.ChromeOptions()
options.add_argument('--headless')

driver = webdriver.Chrome(options=options)
driver.get('https://www.amazon.co.jp/')
driver.save_screenshot('amazon.png')
driver.quit()

f:id:white-azalea:20201222190211p:plain

スクロール含めたすべてを取得してみる

上記コードに割り込みを入れて

driver.get('https://www.amazon.co.jp/')

# ここから
page_width  = driver.execute_script('return document.body.scrollWidth')
page_height = driver.execute_script('return document.body.scrollHeight')
driver.set_window_size(page_width, page_height)
# ここまで

driver.save_screenshot('amazon.png')

ちなみにファイルが大きくて添付諦めた。

実際にクリックなど操作する

このへん から操作を調べつつ書いてみた。
hatenablog_click.py として記述

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait

options = webdriver.ChromeOptions()
driver = webdriver.Chrome(options=options)

# サイトを開く
driver.get('https://white-azalea.hatenablog.jp/')

# 検索フォームを検索
searchForm = driver.find_element(By.CSS_SELECTOR, 'input[class="search-module-input"]')

# 検索フォームに `selenium` を記載
searchForm.send_keys('selenium')

# 検索フォームに enter キーダウンイベントを送信(検索)
searchForm.send_keys(Keys.ENTER)

# 検索結果を待機(最大 3 秒)
def document_initialised(driver):
    return driver.find_element(By.CSS_SELECTOR, 'div[class="search-result"]')
WebDriverWait(driver, 3).until(document_initialised)

# スクリーンショット撮影
driver.save_screenshot('hatenablog.png')

driver.quit()

f:id:white-azalea:20201222195914p:plain

トラブルシューティング