【Python】Seleniumの使い方(ブラウザ自動操作)

Python用モジュール「Selenium」でブラウザを操作する方法についてソースコード付きでまとめました。

【はじめに】Seleniumとは

Seleniumとは、Webブラウザの画面操作を自動化するものです。
簡単にいうとChromeやFirefoxなどのWebブラウザの操作をプログラムで自動化したりできます。

主な用途
1 作成したWebアプリをWebブラウザでテストするときの自動化
2 Webスクレイピング

【環境構築】Selenium、ドライバのインストール

①コマンドプロンプトを開きます。

②下記のコマンドを実行します。

pip install selenium

③seleniumのインストールは以上です。
ただし、seleniumを使うにはWebドライバも入手する必要があります。
続いて、Chrome版 WebDriverをインストールします。

①下記リンクを開きます。
https://sites.google.com/a/chromium.org/chromedriver/

②「Downloads」をクリックします。
※Supports Chromeの横にある数字をみて、お使いのChromeのバージョンが含まれているか確認する必要があります。

③お使いのPC環境にあったものをクリックしてダウンロードします。
※Windows環境なら「chromedriver_win32.zip」

④ZIPを解凍するとドライバを入手できます。
※Windows環境なら「chromedriver.exe」

詳細記事
1 【Python】Seleniumのインストール
2 【WebDriver】Chrome, Firefox版のインストール

【基本操作】URLを開く(待機時間、プロキシ設定)

Python用モジュール「Selenium」を用いて、ブラウザを操作しURLを開きます。
※今回はグーグル検索のトップページを開いてみます。
■Chromeで開く場合

# -*- coding:utf-8 -*-
from selenium import webdriver

# Chromeで操作する場合
driver = webdriver.Chrome()
driver = webdriver.Chrome(executable_path='chromedriver')
driver.get('https://www.google.co.jp/')

■Firefoxで開く場合

# -*- coding:utf-8 -*-
from selenium import webdriver

# Firefoxで操作する場合
driver = webdriver.Firefox()
driver = webdriver.Firefox(executable_path='geckodriver')
driver.get('https://www.google.co.jp/')
詳細記事
1 【Python/Selenium】ブラウザでURLを開く

ページのスクリプトが実行完了するまで待機してからURLを開いてみます。

# -*- coding:utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

url 'https://www.yahoo.co.jp/'

delay_time = 5

driver.get(url)

expected_element = expected_conditions.presence_of_element_located((By.ID, "myElement"))

element = WebDriverWait(driver, delay_time).until(expected_element)
詳細記事
1 【Python/Selenium】ページのスクリプトが実行完了するまで待機

上記のプログラムでは、操作対象のID(myElement)が見つかるまで待機し続けることができます。
待機時間の最大は10秒です。

最近はスクリプトの実行が完了するまで要素が表示されないページが多いです。
そういったページを自動で操作する場合によく使います。

プロキシを使ってWebページにアクセスすることもできます。
所謂「串を刺す」というやつです。

# -*- coding:utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options

url 'https://www.yahoo.co.jp/'


# プロキシの設定
PROXY = '{proxy-server}:{port}' # サーバーとポート
PROXY_AUTH = '{userid}:{password}' # IDとパスワード

# オプション
option = Options()
option.add_argument('--proxy-server=http://%s' % PROXY)
option.add_argument('--proxy-auth=%s' % PROXY_AUTH)

# Chromeで操作する場合
driver = webdriver.Chrome()
driver = webdriver.Chrome(executable_path='chromedriver', chrome_options=option)

# ページをロード
driver.get(url)
詳細記事
1 【Python/Selenium】プロキシを使ってWebページにアクセス

【スクレイピング】要素取得、キーワード検索

id属性、class属性を指定して要素を取得することができます。

# -*- coding:utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options

url = 'https://algorithm.joho.info/'

# Chromeで操作する場合
driver = webdriver.Chrome()
driver = webdriver.Chrome(executable_path='chromedriver')

# ページをロード
driver.get(url)

# ID名:custom_html-2 の要素を取得
tag_id = driver.find_element_by_id('custom_html-2')

# class名:entry-title entry-title-link の要素を取得
tags_class = driver.find_elements_by_class_name('class-name')

print('Tag ID:', tag_id.text) #  Twitter/Youtube
詳細記事
1 【Python/Selenium】id属性、class属性を指定して要素を取得

ブラウザを操作しDuckDuckGoで自動的にキーワード検索を行ってみます。

# -*- coding:utf-8 -*-
from selenium.webdriver.common.keys import Keys
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains

# 検索エンジンのURL:duckduckgo
url = 'https://duckduckgo.com/'

# Chromeで操作する場合
driver = webdriver.Chrome()
driver = webdriver.Chrome(executable_path='chromedriver')
driver.get(url)

# 検索ワード入力欄の要素をid名から取得
search_text_element = driver.find_element_by_xpath("//*[@id='search_form_input_homepage']")

# 検索ボタンの要素をid名から取得
search_button_element = driver.find_element_by_xpath("//*[@id='search_button_homepage']")

# 操作
actionChains = ActionChains(driver)

# 検索ワード「沖田オルタ」で検索
actionChains.send_keys_to_element(search_text_element, "沖田オルタ").click(search_button_element).perform()
関連記事
1 【Python/Selenium】DuckDuckGoで自動的にキーワード検索
2 【Python/Selenium】ブラウザ操作入門【Python】Webスクレイピング入門Python入門 基本文法【Python】ネットワークプログラミング入門
関連記事