Python

PythonでSeleniumを使ってブラウザを自動操作する方法

By 2021年10月10日No Comments

この記事では、PythonのライブラリであるSeleniumの使い方について解説していきます。

Udemyの動画学習でもPythonを勉強しよう!

「平日の夜の勉強会には時間が間に合わなくて参加できない」「通勤時間のわずかな隙間時間を勉強時間にあてたい」「本ではよく分からないところを動画で理解を深めたい」そんなあなたはUdemyの動画学習がお勧めです!

UdemyのPythonおすすめ33講座レビューリスト

Seleniumとはブラウザを自動的に操作する事ができるライブラリです。

まずはWindowsならコマンドプロンプト、Macでターミナルなどのコマンドラインで下記のように指定してインストールします。

pip install selenium

ブラウザはGoogleChromeを使用するのでchromedriver_binaryモジュールもインストールします。

pip install chromedriver_binary

今回はChromeDriverを使うので事前にPCにGoogleChromeをダウンロードしてインストールしている必要があります。

PythonのSeleniumでWebサイトを表示させてページを開く方法

Seleniumからwebdriverをインポートしてwebdriverのget( )メソッドを使って引数にGoogleのURLを指定するとWebサイトを表示させる事ができます。

from selenium import webdriver
import chromedriver_binary

#ChromeOptionsを設定
options = webdriver.ChromeOptions()

#Chromeを起動
driver = webdriver.Chrome(options=options)

#指定したURLに遷移
driver.get('https://www.google.co.jp')

#Chromeブラウザを終了
driver.quit()

表示させたブラウザ画面を終了するためにコードの最後にquit( )メソッドを使っています。quit( )メソッドを使わない場合はブラウザ画面がPC上に表示されっぱなしになります。

続いて、検索ボックスに文字列を入力をします。テキストフィールドやテキストエリアに文字列を入力するにはsend_keys( )メソッドを使います。

検索バーのname属性が「q」なのでfind_element_by_name( )の引数に「q」を指定しています。

from selenium import webdriver
import chromedriver_binary

#ChromeOptionsを設定
options = webdriver.ChromeOptions()

#Chromeを起動
driver = webdriver.Chrome(options=options)

#指定したURLに遷移
driver.get('https://www.google.co.jp')
search_bar = driver.find_element_by_name("q")
search_bar.send_keys("本町オープンソースラボ")

#Chromeブラウザを終了
driver.quit()

Googleの検索ボックスに文字が入力されているのがわかります。属性の確認方法などはGoogleChromeでWebページを開いて右クリックをするとメニューが表示されますので、その中から「検証」を選択すると確認する事ができます。

今回はname属性で要素を検索していますが、他にも様々な要素での検索方法があります。seleniumの主な検索メソッドは下記になります。

メソッド説明
find_element_by_id(id)id属性で要素を検索します
find_element_by_name(name)name属性で要素を検索します
find_element_by_class_name(name)class属性で要素を検索します
find_element_by_tag_name(name)タグ名で要素を検索します
find_element_by_xpath(xpath)XPathで要素を検索します
find_element_by_css_selector(css_selector)CSSセレクタで要素を検索します
find_element_by_link_text(link_text)リンクテキストで要素を検索します
find_element_by_partial_link_text(link_text)リンクテキストの部分一致で要素を検索します

submit( )メソッドを実行するとブラウザ画面で検索結果を表示させる事ができます。

from selenium import webdriver
import chromedriver_binary

#ChromeOptionsを設定
options = webdriver.ChromeOptions()

#Chromeを起動
driver = webdriver.Chrome(options=options)

#指定したURLに遷移
driver.get('https://www.google.co.jp')
search_bar = driver.find_element_by_name("q")
search_bar.send_keys("本町オープンソースラボ")
search_bar.submit()

#Chromeブラウザを終了
driver.quit()

実行するとブラウザに検索結果が表示されました。forループを使って検索結果を取得していきます。

from selenium import webdriver
import chromedriver_binary

#ChromeOptionsを設定
options = webdriver.ChromeOptions()
#options.add_argument('--headless')

#Chromeを起動
driver = webdriver.Chrome(options=options)

#指定したURLに遷移
driver.get('https://www.google.co.jp')
search_bar = driver.find_element_by_name("q")
search_bar.send_keys("本町オープンソースラボ")
search_bar.submit()

for h3 in driver.find_elements_by_xpath('//a/h3'):
    a = h3.find_element_by_xpath('..')
    print(h3.text)
    print(a.get_attribute('href'))

#Chromeブラウザを終了
driver.quit()

出力結果:

本町オープンソースラボ -大阪でのIT勉強会多数開催!大阪 ...
https://hosl.dev/
本町オープンソースラボ - connpass
https://soumeetup.connpass.com/
本町オープンソースラボ - Home | Facebook
https://m.facebook.com/hommachiopensourcelab/
(...以下省略)

検索結果を取得する事ができました。Seleniumでブラウザを操作する時にはサーバーの負荷を減らすためにsleepモジュールを一緒に使うといいです。

from selenium import webdriver
import chromedriver_binary
import time

#ChromeOptionsを設定
options = webdriver.ChromeOptions()
#options.add_argument('--headless')

#Chromeを起動
driver = webdriver.Chrome(options=options)

#指定したURLに遷移
driver.get('https://www.google.co.jp')
time.sleep(3)

search_bar = driver.find_element_by_name("q")
search_bar.send_keys("本町オープンソースラボ")
search_bar.submit()

for h3 in driver.find_elements_by_xpath('//a/h3'):
    a = h3.find_element_by_xpath('..')
    print(h3.text)
    print(a.get_attribute('href'))
    time.sleep(3)

#Chromeブラウザを終了
driver.quit()

sleep( )メソッドを使って一定の間隔を空けて指定した要素を取得する事ができました。

sleepモジュールの使い方についてはこちらの記事で解説しています。

click( )メソッドでページをクリックしてWebサイトを表示させます。

from selenium import webdriver
import chromedriver_binary
import time

#ChromeOptionsを設定
options = webdriver.ChromeOptions()

#Chromeを起動
driver = webdriver.Chrome(options=options)

#指定したURLに遷移
driver.get('https://www.google.co.jp')
time.sleep(3)

search_bar = driver.find_element_by_name("q")
search_bar.send_keys("本町オープンソースラボ")
search_bar.submit()

for elem_h3 in driver.find_elements_by_xpath('//a/h3'):
    elem_a = elem_h3.find_element_by_xpath('..').click()

#Chromeブラウザを終了
driver.quit()

このようにSeleniumを使うとブラウザ画面を自動的に操作する事ができます。 

PythonのSeleniumをヘッドレスモードにしてブラウザの自動操作をする

PC上にブラウザ画面を表示させずにプログラムだけを実行させるヘッドレスモードにする事もできます。ヘッドレスモードで実行する場合は下記のコードを追加します。

options.add_argument(‘–headless’)

from selenium import webdriver
import chromedriver_binary

#ChromeOptionsを設定
options = webdriver.ChromeOptions()
options.add_argument('--headless')

#Chromeを起動
driver = webdriver.Chrome(options=options)

#指定したURLに遷移
driver.get('https://www.google.co.jp')
search_bar = driver.find_element_by_name("q")
search_bar.send_keys("本町オープンソースラボ")
search_bar.submit()

for elem_h3 in driver.find_elements_by_xpath('//a/h3'):
    elem_a = elem_h3.find_element_by_xpath('..')
    print(elem_h3.text)
    print(elem_a.get_attribute('href'))

#Chromeブラウザを終了
driver.quit()

出力結果:

本町オープンソースラボ -大阪でのIT勉強会多数開催!大阪 ...
https://hosl.dev/
本町オープンソースラボ - connpass
https://soumeetup.connpass.com/
本町オープンソースラボ - Home | Facebook
https://m.facebook.com/hommachiopensourcelab/
(...以下省略)

ヘッドレスモードで実行してブラウザの画面が表示されずにタイトルとURLの一覧を出力画面に表示させる事ができました。 

まとめ

この記事ではPythonのSeleniumの使い方についてでした。人間がブラウザを経由して操作しているのと同じような動きをSeleniumでは自動ですることができます。以上、PythonでSeleniumを使ってブラウザを自動的に操作する方法についてでした。

Udemyの動画学習でもPythonを勉強しよう!

「平日の夜の勉強会には時間が間に合わなくて参加できない」「通勤時間のわずかな隙間時間を勉強時間にあてたい」「本ではよく分からないところを動画で理解を深めたい」そんなあなたはUdemyの動画学習がお勧めです!

UdemyのPythonおすすめ33講座レビューリスト
HOSL

Author HOSL

More posts by HOSL