※ 過去記事の再掲載です。
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("[保存先ファイルパス]")
コメント