HOME
Selenium

ブラウザ操作を自動化するSeleniumについて

●Seleniumとは?

Web ブラウザの操作を自動化するためのフレームワーク。Pythonなどの言語を使ってChromeなどのブラウザを操作できる。

●何が出来るか?

URLからページを開き、ページ内のボタンをクリックしたり、テキストボックスに入力したり、 その結果表示される画面のスクリーンショットを保存したり、結構何でもできる。

●環境構築 (Linux向け)

chromium-browserのインストール
ここでは、オープンソースのブラウザであるchromium-browserを使う。ない場合は、
$ sudo apt install chromium-browser
Python用Seleniumドライバのインストール
$ pip install selenium
chromium-browser用ドライバのインストール
$ sudo apt install chromium-chromedriver
これで動くはず。

●サンプルコード

from selenium.webdriver import Chrome, ChromeOptions from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions import time import sys if __name__ == '__main__': url = 'https://www.sample-u.ac.jp/ UserID = "xxxxxx" password = "yyyyyyyy" # ブラウザーをシークレットモードで起動 # (前回訪問時のキャッシュなどで初期状態が変わらないようにするため) options = ChromeOptions() options.add_argument('-headless') options.add_argument('incognito') options.add_argument('--hide-scrollbars') # Chromedriverのパスを指定 driver = Chrome(executable_path='/usr/bin/chromedriver', options=options) driver.get(url) # 画面表示を最大5秒まで待つ driver.implicitly_wait(5) # ログイン画面 # UseID入力 driver.find_element_by_id('USER_ID').send_keys(UserID) # パスワード入力 driver.find_element_by_id('USER_PASSWORD').send_keys(password) # ログインボタンをクリック driver.find_element_by_name('cmdForm.Submit').click() time.sleep(1) # 「MFA登録のお願い」という画面が現れたときに「MFA登録せずにログイン」を選択 try: driver.execute_script('document.cmdForm.submit();') except : pass # 押したいボタンがあるフレームに移動 iframe = driver.find_element_by_id('V3iFrame') driver.switch_to.frame(iframe) # コマンドライン引数による分岐 if sys.argv[1] == "Start": # 朝押したいボタンを押す driver.find_element_by_name('btTimePunchStart').click() elif sys.argv[1] == "End": # 夜押したいボタンを押す driver.find_element_by_name('btTimePunchEnd').click() else: print('引数が間違っています') time.sleep(1) # スクリーンショットを保存 driver.save_screenshot('result.png') # フレームから出る driver.switch_to.default_content() # 確認ページに移動 driver.find_element_by_id('button0').click() # アラートが出る場合消す try: alert = driver.switch_to.alert alert.accept() except : pass # 縦と横のサイズを取得してキャプチャを取得する (ページ全体を保存) 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('result2.png') driver.close()
●サンプルコードの実行

$ python sample.py "Start"
これで「朝押したいボタン」がクリックされて、その結果の画面のスクリーンショットがresult.pngとresult2.pngに保存されている(はず)。

●参考サイト

https://fumitoblog.com/maked-automation-for-work-start-and-end/
https://irukanobox.blogspot.com/2021/02/raspberry-pipythonselenium.html



最終更新 2022/9/21