Selenium覚書き(Python編)

開発・プログラミング

※ 過去記事の再掲載です。

Seleniumとは、Webアプリケーションのテストを自動化するためのツールです。
ざっくり言うと、Webブラウザで実際は人が行う操作を、プログラミングによって自動で行ってくれるものです。
私はテストとしてだけでなく、RequestsとBeautifulSoupでのWebスクレイピングでは取得できないようなものを取ってくるのに使用したりもしています。

Seleniumでできる様々な操作を以下に記述しました。
自分用の覚書きとして。
(※Python編とありますが、他言語での記事作成の予定はありません。)

インストール

pipで簡単インストール。

$ pip install selenium

インポート

とりあえずwebdriverがあればなんとかなる。

from selenium import webdriver

ブラウザ起動/終了

ブラウザ起動

# Chrome
driver = webdriver.Chrome()
 
# FireFox
driver = webdriver.Firefox()

ブラウザ終了

driver.quit()

以下、Chromeの場合の記述になります。(FireFoxでもそんなに変わらないはず。)

URLを開く

driver.get("https://www.awawaweb.com/")
 
# 前の画面に戻る(history back)
driver.back()

要素の取得

# IDで取得
element = driver.find_element_by_id("idname")
 
# name属性で取得(inputタグ等)
element = driver.find_element_by_name("username")
 
# XPathで取得
driver.find_element_by_xpath("//input[@value='Cat']")
 
# 要素内のテキストを取得
text = driver.find_element_by_id("idname").text()

XPathの確認方法

1.Chromeのデベロッパツールにて、Elementsの要素を右クリック → Copy → Copy XPath
2.Chromeのデベロッパツールにて、Consoleに下記のように記述

$x('//div[@id="idname"]/div/h2')

要素をクリック

# 要素クリック
driver.find_element_by_id("button").click()
 
# リンククリック
driver.find_element_by_link_text("Google").click()

フォーム入力

# テキスト入力
driver.find_element_by_name("username").send_keys("awawa")
 
# チェックボックスの選択
driver.find_element_by_xpath("//input[@name='animal' and @value='Cat']").click()
 
# セレクトボックスの選択
driver.find_element_by_xpath("//select[@name='todoufuken']/option[text()='埼玉県']").click()
 
# ファイルアップロードにファイル指定
driver.find_element_by_id("uploadfile").send_keys("[アップロードするファイルパス]")

JavaScriptの実行

driver.execute_script('document.getElementById("inner").innerHTML = "Bye";')

ウィンドウサイズの変更

driver.set_window_size(1280,800)

フレーム内の要素に対する操作

# フレーム内のページに移動
driver.switch_to.frame("content_ifr")
 
# driverがフレーム内のページそのものになっているので、driverに対して直接操作する
driver.execute_script('document.getElementById("inner").innerHTML = "inner Bye";')
 
# 元(親)のページに移動
driver.switch_to.default_content()

待機(秒数で設定)

driver.implicitly_wait(10)
 
# 普通にtime.sleepでやっても良い
time.sleep(2)

ソースの取得

source = driver.page_source

スクリーンショットをとる

driver.save_screenshot("[保存先ファイルパス]")

コメント

タイトルとURLをコピーしました