概要
この記事ではPythonでSeleniumを使う際に役に立つ(かもしれない)Tipsを紹介していきます。
webdriver-managerで最新のwebdriverを自動取得
Seleniumを運用する際に必要となるwebdriver、定期的に更新する必要があったりと面倒です。
そんな時にwebdriver-manager
を使用することで自動で対応したバージョンのwebdriverを取得してくれます!
使い方も非常にシンプルでdriverを定義する際に指定するだけ。
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
# chromedriverのパスを指定する代わりにwebdriver_managerを呼び出す
driver = webdriver.Chrome(ChromeDriverManager().install())
また、Firefoxの場合は、
from selenium import webdriver
from webdriver_manager.firefox import GeckoDriverManager
driver = webdriver.Firefox(executable_path=GeckoDriverManager().install())
シンプルですがめちゃくちゃ便利です。
保存先も邪魔にならない場所に置いてくれるのでディレクトリも散らかりません。
要素が存在するかチェックする
普通にfind_element
メソッドを使用すると要素が存在しない場合にエラーが返ってきます。
try exceptでも対応出来なくは無いですが、綺麗なやり方とは言えないので私はfind_elements
で要素の有無をチェックします。
# 要素をリストで取得する(存在しない場合はリストの長さが0になる)
elements = driver.find_elements_by_xpath('有無を確認したい要素')
# 要素が存在しない場合
if len(elements) == 0:
# 要素が存在しない場合の処理
else:
# 要素が存在する場合の処理
ファイルの保存先を指定する
Seleniumを使用してデータを保存したい場合に使用します。
from selenium import webdriver
download_dir = "ファイルを保存したいディレクト"
options = webdriver.ChromeOptions()
# 保存先をchromeに適用
prefs = {"download.default_directory": download_dir}
options.add_experimental_option("prefs", prefs)
driver = webdriver.Chrome(options=options)
要素が読み込まれるまで待機する
サイトによっては要素の読み込みに時間がかかる場合があります。
そんな場合にはexpected_conditions
を使用します。よくECと略されます。
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
# 15秒まで待機するよう設定
wait = WebDriverWait(driver, 15)
# 要素を読み込むまで15秒待機(15秒経過しても読み込めない場合、Exception出力)
element = wait.until(EC.visibility_of_element_located((By.XPATH, "読み込みたい要素")))
操作するタブを切り替える
稀に別タブに切り替えて操作を行いたいというケースがあると思います。
そんな場合にはswitch_to
を使用します。
# 新しいタブに切り替える
driver.switch_to.window(driver.window_handles[1])
# 元のタブに切り替える
driver.switch_to.window(driver.window_handles[0])
また、新しいタブを閉じたい場合は以下のように行います。
# 新しいタブに切り替える
driver.switch_to.window(driver.window_handles[1])
# 新しいタブを閉じる
driver.close()
# 元のタブに切り替える(これをしないと後の処理でエラー出ます)
driver.switch_to.window(driver.window_handles[0])
driver.quit()
だとウィンドウごと閉じてしまうので間違えないように気を付けましょう。
Tor Proxyを使用してwebdriverを動かす
※悪用厳禁です。使用は自己責任でお願いします。
まずTorブラウザを立ち上げ、右上の設定ボタン → Options → Tor → Advanced という順番に進み、下記のように設定します。
次にTorブラウザを起動させた状態のまま、下記プログラムを実行します。
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
# Torで設定したプロキシを指定する
options.add_argument("--proxy-server=socks5://127.0.0.1:9150")
# Tor Proxyを使用したchromedriverを起動
driver = webdriver.Chrome(options=options)
私は開発したwebアプリのアクセス制御の検証の際に使用しています。
Tor Proxyを使用する際は自分の管理下にあるサイトでのみ行うようにした方が良いかもしれません。
最後に
他にも便利な機能等ありましたら随時追加致します。
皆さんのオススメの機能がありましたらコメント欄で共有頂けますと幸いです!