こんにちは、星杜なぎさです
1. はじめに
- Seleniumは、Webブラウザの操作を自動化するためのツール
- オープンソースなので、無料で利用可能
- WebスクレイピングやRPA(Robotic Process Automation)などに活用できる
1.1 この記事について
- SeleniumのWebDriverについて、情報が散見しているため、まとめた
- 実際に動かして、コードのどの部分がどの動作に対応しているか確認しやすくした
1.2 対象読者
- プログラム言語(特にpython)が多少読める、書ける
- PCの基本操作(Drag and Dropなど)を知っている
- Webブラウザの基本操作を知っている
1.3 動作環境
2. とりあえず動かしてみるサンプルコード
まずは動かしてみよう
test_webdriver.py
from time import sleep
from selenium import webdriver
from selenium.webdriver.edge.service import Service
from selenium.webdriver.common.by import By
"""
事前にEdgeのWebDriverを入手しておくこと
"""
SERVICE = Service("./edgedriver_win64/msedgedriver.exe")
TARGET_URL = "https://www.selenium.dev/selenium/web/web-form.html"
try:
driver = webdriver.Edge(service=SERVICE)
driver.set_page_load_timeout(1)
driver.set_script_timeout(2)
driver.implicitly_wait(3)
timeout_class = driver.timeouts
print("Timeout設定\n"
"implicit_wait : ", timeout_class.implicit_wait, "\n",
"script : ", timeout_class.script, "\n",
"class.page_load : ", timeout_class.page_load, "\n"
)
driver.get(TARGET_URL)
sleep(1)
print("driver.current_url : ", driver.current_url, "\n",
"driver.title : ", driver.title, "\n",
"driver.page_source : ", driver.page_source, "\n"
)
driver.set_window_rect(100, 200, 600, 400)
sleep(1)
driver.fullscreen_window()
sleep(1)
driver.minimize_window()
sleep(1)
driver.maximize_window()
sleep(1)
element = driver.find_element(By.XPATH, '/html/body/main/div/form/div/div[2]/button')
element.click()
driver.back()
sleep(1)
driver.forward()
sleep(1)
driver.refresh()
sleep(1)
driver.execute_script("alert('Hello, World!!')")
sleep(1)
alert = driver.switch_to.alert
alert.accept()
sleep(1)
driver.get_screenshot_as_file('2_SC.png')
sleep(1)
driver.switch_to.new_window('tab')
sleep(1)
driver.switch_to.new_window('window')
sleep(1)
handle_list = driver.window_handles
print("handle_list : ", handle_list, type(handle_list))
for handle in handle_list:
driver.switch_to.window(handle)
sleep(1)
driver.close()
print("handle_list(.close後) : ", driver.window_handles)
sleep(1)
finally:
driver.quit()
print("conplete run!!")
2.3 一覧表
今回使用したメソッドや属性について、カテゴリごとに分けて記載する
2.3.1 設定関連
属性/メソッド |
説明 |
driver.set_page_load_timeout(seconds) |
ページロードのtimeout秒数を設定 |
driver.set_script_timeout(seconds) |
script実行時のtimeout秒数を設定 |
driver.implicitly_wait(seconds) |
要素を見つける際のtimeout秒数を設定 |
2.3.2 URLへのアクセス
属性/メソッド |
説明 |
driver.get(target_url) |
指定されたURLにアクセスする |
driver.current_url |
現在のURLを取得 |
driver.title |
現在のページタイトルを取得 |
driver.page_source |
現在のページのソースコードを取得 |
2.3.3 ウィンドウの大きさなど
属性/メソッド |
説明 |
driver.set_window_rect(x, y, width, height) |
指定した矩形{x, y, width, height}にウィンドウの形を設定 |
driver.fullscreen_window() |
フルスクリーンモードにする |
driver.minimize_window() |
ウィンドウを最小化 |
driver.maximize_window() |
ウィンドウを最大化 |
2.3.4 ウィンドウハンドルの操作
属性/メソッド |
説明 |
driver.switch_to.new_window('tab') |
新しいタブを開く |
driver.switch_to.new_window('window') |
新しいウィンドウを開く |
driver.window_handles |
現在のwindow_handleの一覧(list)を取得 |
driver.driver.switch_to.window(handle) |
指定したhandleに移動する |
2.3.5 ウィンドウを閉じる
属性/メソッド |
説明 |
driver.close() |
現在のウィンドウを閉じる |
driver.quit() |
WebDriverのインスタンスを終了し、全てのウィンドウを閉じる |
2.3.6 その他小技(JavaScriptの実行、alertの取得、スクショ保存)
属性/メソッド |
説明 |
driver.execute_script(script) |
javascriptのコードを実行する |
driver.switch_to.alert |
現在表示されているalertを取得 |
driver.get_screenshot_as_file(filepath) |
画面のスクリーンショットを保存する |
3. まとめ
- 動かして学ぶほうが理解が早いと感じた
- 特に、handle周りの理解は文章だけではよくわからなかったため、
実際に新規ウィンドウやタブを生成する動作を確認できて理解が深まった
参考URL
Discussion