PythonのSeleniumでWebブラウザ自動操作する基礎からの使い方チートシート

Python

Seleniumライブラリでは、PythonからWebブラウザを自動制御することができます。

クリック操作やキーボード入力もできるので、ID・パスワードを入力して会員制サイトに自動ログインすることも可能です。

どこを操作したいか?どんな操作をするか?を命令するだけでWebブラウザを簡単に操作できます。

今回は、Seleniumでよく使うコマンド操作をチートシート形式で実例と共に解説していきます。

この記事を読むことで、Seleniumの基本的な使い方を身に着けることができます。

Seleniumを使うために必要な準備

Seleniumを使ってWebブラウザを自動操作するには、いくつかの準備が必要になります。

Seleniumのインストール

pip install selenium

Seleniumは外部ライブラリなので、インストールが必要です。
プログラムを実行する前に、上のように記述してインストールをします。

WebDriverをPCにダウンロード

まず始めにWebDriverという、Webブラウザを外部から操作できるようにするツールを用意しておきます。

WebブラウザのバージョンとWebドライバーのバージョンは揃える必要があります。

Seleniumで操作できるブラウザ

Seleniumで操作できるWebブラウザは以下の通りです。
リンクをクリックすると、Webドライバーのダウンロードページに飛びます。

(現在はPhantomJSはメンテナンスがされていないため、避けるのが賢明です。)

参考ページ ドライバー要件

今回はよく使われているGoogleChromeをChromeDriverを使って操作していきます。

pipでインストールできるChromeDriverが便利

Webドライバーを準備する場合、事前にコンピュータ上にダウンロードしておく必要があります。

Pythonにはchromedriver_binaryという便利なライブラリがあり、次の一行を書くことでChromeDriverをインストールできます。

pip install chromedriver_binary==クロームドライバーのバージョン

参考ページ chromedriver-binary · PyPI

「クロームドライバーのバージョン」の部分はクロームの「設定」→「Chromeについて」というところを開けば出てきます。その値を記入して下さい。

クロームのバージョン確認できる場所

chromedriver_binaryならPATHを通す必要がないので便利

このchromedriver_binary

を使うメリットはPATHを通す必要がないということです。

よくあるPATHを通して下さいというエラーも出ないのでスムーズです。

“'chromedriver' executable needs to be available in the path”

個人でSeleniumを使う場合はchromedriver_binaryで十分です。

SeleniumでWebブラウザを操作する方法

さて、ここからはSeleniumの具体的な使い方の説明です。

Seleniumを使ってWebブラウザを操作する方法をみていきます。

from selenium import webdriver

まずはじめにプログラム冒頭でSeleniumライブラリをインポートしておきます。

import chromedriver_binary

ChromeDriver_binaryを利用する場合、こちらもインポートします。

Webブラウザを起動する

webdriver.Chrome()

webdriver.Chrome()で、空のページでWebブラウザを起動します。
返り値のWebDriverオブジェクトに命令を与えることで、Webブラウザを操作できます。

取得したWebDriverオブジェクトをdriver変数に格納します。

driver = webdriver.Chrome()

ここまでのコードは下記のようになり、実行すると空のブラウザが立ち上がります。

from selenium import webdriver
import chromedriver_binary

driver = webdriver.Chrome()

下記のように表示されればOKです。

クロームの起動

Seleniumでは、Webブラウザごとに起動するメソッドが違うので確認しておきましょう。

webdriver.Chrome() GoogleChrome
webdriver.Edge() MicrosoftEdge
webdriver.PhantomJS() PhantomJS
webdriver.Firefox() FireFox

指定したURLにアクセスする

  • ページにアクセス
  • driver.get("アクセスしたいURL")

    get()で、引数に指定したURLにアクセスします。

    例えば、グーグルにアクセスする場合

    driver.get("https://www.google.com/?hl=ja")

    とすればいいです。するとグーグルに遷移します。

    グーグルの画面

     

  • ページを戻る(ブラウザバック)
  • driver.back()

    back()で、1つ前のページにブラウザバックします。

  • ページを進む(ブラウザバックの取り消し)
  • driver.forward()

    forward()で、ブラウザバックを取り消して先のページに進みます。

  • ページを更新(リロード)
  • driver.refresh()

    refresh()で、現在のページをリロードして再び読み込みます。

ウィンドウを閉じる操作

  • ウィンドウを1つ閉じる
  • driver.close()

    close()で、現在のウィンドウを閉じます。

  • すべてのウィンドウを閉じる
  • driver.quit()

    quit()で、すべてのウィンドウを閉じます。

  • ページのURLを調べる
  • driver.current_url

    current_urlで、現在のページのURLの文字列を取得します。

  • ページのタイトルを調べる
  • driver.title

    titleで、現在のページのタイトルの文字列を取得します。

  • ページのソースを取得する
  • driver.page_source

    page_sourceで、現在のページのソースコードの文字列を取得します。

まずは操作したい場所をHTMLの要素で選択

ページにアクセスできたら、次はどこを操作したいかを指定してあげましょう。
Webページ上の操作したい対象はHTMLの要素で指定して選択します。

find_elementメソッドを使うと、選択した要素をWebElementオブジェクトとして取得できます。

id属性 driver.find_element_by_id()
name属性 driver.find_element_by_name()
class属性 driver.find_element_by_class_name()
tag名 driver.find_element_by_tag_name()
リンクテキスト driver.find_element_by_link_text()
xpath driver.find_element_by_xpath()
cssセレクタ driver.find_element_by_css_selector()

find_elementメソッドは、driver.find_element_by〜〜と覚えればOKです。
複数の要素を指定したい場合は、driver.find_elements_by〜〜で対応できます。

属性やタグ名から操作したい場所を選択する

  • name属性から選択
  • driver.find_element_by_name("選択したいname属性")

    find_element_by_name()で、引数のname属性とマッチする要素を選択します。

  • class属性から選択
  • driver.find_element_by_class_name("選択したいclass属性")

    find_element_by_class_name()で、引数のclass属性とマッチする要素を選択します。

  • tag名から選択
  • driver.find_element_by_tag_name("選択したいtag名")

    find_element_by_tag_name()で、引数のtag名とマッチする要素を選択します。

  • id属性で選択
  • driver.find_element_by_id("選択したいid属性")

    find_element_by_id()で、引数のid属性とマッチする要素を選択します。
    id属性を持っている要素なら、一気に絞り込めるのでオススメです。

    マッチする要素が複数あった場合、最初に見つかった1つだけが選択されます。

xpathやcssで操作したい場所を指定する

  • xpathで指定
  • driver.find_element_by_xpath("選択したいxpath")

    find_element_by_xpath()で、引数のxpathとマッチする要素を選択します。

  • cssセレクタで指定
  • driver.find_element_by_css_selector("選択したいcssセレクタ")

    find_element_by_css_selector()で、引数のcssセレクタとマッチする要素を選択します。

xpathやcssセレクタを使うと、選択したい要素について細かく指定することができます。
こちらの方法では、◯番目の◯属性というように指示できるので、確実に要素を特定できます。

xpathやcssセレクタとは、html内の要素を表すために使う条件式のようなものです。
書き方がわからなくても、Chromeのデベロッパーツールで調べることができるので大丈夫です。

つづいて選択した要素を操作する

どこを操作したいか選択できたら、次はどんな操作をしたいかを命令します。

要素を選択した後、WebElementオブジェクトにコマンドを与えると要素を操作できます。

クリックやキーボード入力の操作

  • クリックする
  • driver.find_element_by_属性("選択したい要素").click()

    click()で、選択されている要素をクリックします。

  • キーボード入力する
  • driver.find_element_by_属性("選択したい要素").send_keys()

    send_keys()で、テキスト欄にキーボード入力を行うことができます。
    <input>や<textarea>などのテキスト欄の要素にのみ対応しています。

  • 送信する
  • driver.find_element_by_属性("選択したい要素").submit()

    submit()で、入力した情報の送信を行います。
    キーボード入力を行った後などに使います。

文字列の値以外にも、特殊なキーを入力するためのメソッドもあります。
from selenium.webdriver.common.keys import keysと記述してから行います。

 

矢印キー(↑↓←→) Keys.UP,Keys.DOWN,Keys.LEFT,Keys.RIGHT
PageUPキー・PageDownキー Keys.PAGE_UP,Keys.PAGE_DOWN
Enterキー・Returnキー Keys.ENTER,Keys.RETURN
Homeキー・Endキー Keys.HOME,Keys,END
Backspaceキー・Deleteキー Keys.BACK_SPACE,Keys.DELETE
Shiftキー・Tabキー・Escキー Keys.SHIFT,Keys.TAB,Keys.ESCAPE
F1〜F12キー Keys.F1,Keys.F2…Keys.F12

これを使うことで、キーボードの同時押しなどの操作も可能です。
element.send_keys(Keys.SHIFT,"selenium")
(例)Shiftキーを押しながら、seleniumと入力するコード

プルダウンボックスの選択


↑のような、プルダウンボックスを選択するといった操作もできます。

from selenium.webdriver.support.select import Select
上記でSelectをインポートすると、セレクトボックスを操作できるようになります。

  • index番号で操作する
  • Select(element).select_by_index(index番号)

    select_by_index()では、index番号で選択します。

  • valueの値で操作する
  • Select(element).select_by_value("value")

    select_by_value()で、valueの値から選択します。

  • テキストから選択する
  • Select(element).select_by_visible_text("text")

    select_by_visible_text()で、表示テキストから選択します。

使用例として、このページのプルダウンボックスの「選択肢1」を選択するには下記のように記述します。

from selenium import webdriver
from selenium.webdriver.support.select import Select
import chromedriver_binary

driver = webdriver.Chrome()
driver.get("https://hashikake.com/selenium")

select_num = 1

element = driver.find_element_by_name("プルダウン")

select = Select(element)
select.select_by_index(select_num)

実行すると下記のように「選択肢1」が選択された形になります。

選択した要素から情報を取り出す

  • テキストを取得
  • driver.find_element_by_要素("選択したい要素").text
    textで、選択した要素からテキストを取得します。

  • タグ名を取得
  • driver.find_element_by_要素("選択したい要素").tag_name
    tag_nameで、選択した要素からタグ名を取得します。

  • 属性の値を取得
  • driver.find_element_by_要素("選択したい要素").get_attribute("属性名")
    get_attribute()で、選択した要素から指定した属性の値を取得します。

  • 座標を取得
  • driver.find_element_by_要素("選択したい要素").location
    locationで、選択した要素のページ上でのx座標・y座標を取得します。

要素の状態をチェックする

  • 要素が選択されているか
  • driver.find_element_by_要素("選択したい要素").is_selected()
    is_selected()で、要素が選択されているかチェックします。

  • 要素が有効になっているか
  • driver.find_element_by_要素("選択したい要素").is_enabled()
    is_enabled()で、要素が有効になっているかチェックします。

  • 要素が表示されているか
  • driver.find_element_by_要素("選択したい要素").is_displayed()
    is_displayed()で、要素が表示されているかチェックします。

ダウンロードフォルダの変更

ChromeDriverのダウンロードフォルダをデフォルトから変更したい場合は次を追加して下さい。

#ダウンロードフォルダーをデフォルトから変更
options = webdriver.ChromeOptions()
options.add_experimental_option('prefs', {
'download.default_directory': r'パスを入力',
'download.prompt_for_download': False,
'download.directory_upgrade': True,
'safebrowsing.enabled': True
})
driver = webdriver.Chrome(options=options)

パスを入力の部分に変更後のパスを入れます。

コメント

タイトルとURLをコピーしました