ブラウザ操作を自動化する Selenium を Python から使う場合のメモ

ブラウザ操作を自動化する Selenium を Python から使う場合のメモです。

準備


Ubuntu の場合


chromium ブラウザの場合です。

必要パッケージ・Seleniumをインストールします。


apt-get install python3
pip3 install selenium
apt-get install chromium-browser


ChromeDriver を取得します。

http://chromedriver.chromium.org/downloads
の Latest Release の個所から、chromedriver_linux64.zip をダウンロード・展開します。

展開すると chromedriver ができているので、パスの通っているところに置きます。

cp chromedriver /usr/bin/



Windows の場合


Chrome ブラウザの場合です。

Chrome を以下からダウンロード・インストールします。

https://www.google.com/intl/ja_ALL/chrome/


Python3 を以下からダウンロード・インストールします。

https://www.python.org/downloads/windows/
の Latest Python 3 Release - Python 3.X.X (Xの個所は数字) の個所から、Windows x86-64 executable installer をダウンロード・実行します。

インストーラ起動後の画面で、「Add Pthon 3.7 to PATH」にチェックし、[Install Now] を押します。


次にChromeDriver を取得します。
http://chromedriver.chromium.org/downloads
の Latest Release の個所から、chromedriver_win32.zip をダウンロード・展開します。
展開すると chromedriver(.exe) ができているので、パスの通っているところに置きます。


Selenium をインストールします。
コマンドラインで以下を実行します。


pip3 install selenium




いろいろなブラウザ操作


Selenium ではマウスクリックやキー入力などのブラウザ操作を自動化できます。
以降の説明は、次のコードの後に書くことを前提にしています。


import os
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions


# Chromのパス(Linuxの場合)
CHROME_BIN = '/usr/bin/chromium-browser'
# Chromのパス(Windowsの場合)
CHROME_BIN = 'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe'

# Seleniumドライバーのパス(Linuxの場合)
CHROME_DRIVER = os.path.expanduser('chromedriver')
# Seleniumドライバーのパス(Windowsの場合)
CHROME_DRIVER = os.path.expanduser('chromedriver.exe')

# URL
URL = 'https://xxxxx.xxxxx'


# Chromeの初期設定
options = Options()
options.binary_location = CHROME_BIN
options.add_argument('--window-size=1024,768')

driver = webdriver.Chrome(CHROME_DRIVER, chrome_options=options)

driver.get(URL)





指定された要素を取得


ブラウザ上のボタンやテキストフィールド等の要素を取得します。
取得した要素に対して、マウスクリックやキー入力を実施できます。(後述)


element = driver.find_element_by_id('XXXXX')


find_element_by_id の他に、find_element_by_name 、 find_element_by_xpath 、find_element_by_class_name があります。

class名にスペースがある場合は、下記のようにします。

element = driver.find_element_by_xpath("//div[@class='AAA BBB']")


指定された要素が現れるまで XX 秒間待つ場合は、下記のようにします。


element = WebDriverWait(driver, XX ).until(
expected_conditions.presence_of_element_located( (By.ID, "YYYYY") )
)


By.ID の他に、By.XPATH や By.CLASS_NAME があります。

class名にスペースがある場合は、下記のようにします。


element = WebDriverWait(driver, 10).until(
expected_conditions.presence_of_element_located((By.XPATH, "//div[@class='aaa bbb']" ))
)


指定の要素へキー入力する



element.send_keys( 'XXXXX' )


Enterキー入力まで実行する場合は、Keys.ENTER を追加します。


element.send_keys( 'XXXXX' + Keys.ENTER )



指定の要素をクリックする



element.click()


一定秒数待つ



time.sleep(XX)


アラートダイアログをクリック



driver.switch_to.alert.accept()


新規ウィンドウへ移動


リンクをクリックすると、新規ウィンドウが出る場合、そのウィンドウに操作の対象を移す方法です。

WebDriverWait(driver, 10).until(lambda d: len(d.window_handles) > 1)
driver.switch_to.window(driver.window_handles[1])




参考


Selenium: alert, confirm, promptを扱う方法 - Qiita
【Python】Seleniumの使用方法メモ - Qiita
[Python] DMM mobileの通信残量をスクレイピングする [Selenium] - Qiita
Selenium で別ウィンドウが開くまで待つ - Qiita
selenium - webdriver classname with space using java - Stack Overflow

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 0

この記事へのコメント

この記事へのトラックバック

  • Selenium でgoogleログイン

    Excerpt: 下記の記事で紹介した Selenium でgoogleログインする場合です。 Weblog: パソコン鳥のブログ racked: 2018-12-26 22:28