Pythonでブラウザの操作を自動化する2つの方法を解説

広告

Pythonでブラウザの操作を自動化する方法とは?

pythonでブラウザの操作を自動化する方法は大きく分けて2つあります。

①Seleniumを使用する方法

Seleniumはブラウザ操作の自動化に特化されており、Webテストやスクレイピングなど多くの用途で使用されています。

HTMLやCSSといった知識が必要なので難易度はやや高めですが、スマートなブラウザ操作の自動化が可能です。一方で、自動化プロセスの性質上、普段使っているブラウザをそのまま使うことが出来ないというデメリットがあります。

Pythonによるブラウザ操作の自動化は、ほとんどがSeleniumを使用したものになっています。  

seleniumでブラウザ操作を自動化した時のアニメーション

②PyAutoGuiを使用する方法

PyAutoGuiを使用する方法は、マウスやキーボードを使っているときのような直観的な操作の自動化が可能で初心者にはかなり馴染みやすいです。

Seleniumでは通常不可能な、自分の普段使っているブラウザをそのまま使用できるというメリットがあります。一方で、GUI操作に頼るためマウスやキーボードの操作が取られやすく、スマートな操作の自動化が難しくなります。

また、GUI操作による自動化のため、ブラウザに限らずアプリケーションの自動化も可能です。
 

それぞれメリット・デメリットがあるこれら2つのブラウザ操作の自動化方法について解説していきます。今回行うのは、ブラウザを起動して任意の文字を入力し、検索を実行するところまでです。
 

ブラウザ操作の自動化に関しては、「増補改訂Pythonによるスクレイピング&機械学習 開発テクニック」を参考にしました。webスクレイピングや機械学習など、pythonの用途として人気の高い分野に関する基礎的な学習もできるのでおすすめです。
 


まだPythonのインストールが済んでいない方はこちらからどうぞ。

関連記事

Pythonはスクリプト型言語の1つです。少ないコードで初心者でも簡単にコーディングが可能で、かつ誰が書いてもコードが読みやすくなるという特徴を持った言語です。 Pythonはライブラリと呼ばれるプログラムの種類が豊富で、様々な機能[…]

Seleniumでブラウザの操作を自動化

Seleniumの準備

Seleniumインストール

Seleniumのインストールを行います。
コマンドプロンプトを起動して「pip install selenium」と入力して実行するとインストールされます。

ChromeDriver導入

ChromeDriver – WebDriver for Chrome からChrome用のWebDriverをダウンロードします。
 

chromedriverダウンロードページのトップ


「Latest stable release(安定版最新)」の方を選択してChromeDriverのダウンロードページに移動します。
 

chromedribverのダウンロードリンク

「Linux」「Mac」「Windows」から自分のOS環境に合わせたものをダウンロードします。windowsの場合、64bitでもwin32を選択してください。
 

ダウンロードしたzipファイルを解凍して出てきた「chromedriver.exe」を、Pythonのインストールされているフォルダに置きます。

「chromedriver.exe」を置く場所はどこでもいいのですが、後々コードを書くときに楽になるので、Pythonのインストールされているフォルダに入れておくのがおすすめです。

Pythonがデフォルトでインストールされているフォルダは以下にあります。
C:\ユーザー\ユーザー名\AppData\Local\Programs\Python\Python37

「AppData」は隠しファイルのため、フォルダの設定によっては見つからない場合もあります。フォルダオプションから隠しファイルを表示する設定にするか、パスの入力欄に「C:\ユーザー\ユーザー名\AppData」と直接入力して移動しましょう。
 

chromedriverを設置するフォルダの場所

画像のように、Pythonの実行ファイルと同じところに「chromedriver.exe」を置いたら準備完了です。

WebDriverの機能を見たい方はこちら(英語サイト)

ブラウザ操作自動化の流れ

今回はブラウザを起動してGoogle検索する所までを自動化します。

大まかな流れとしては以下の通りです。

  1. ブラウザを起動して指定のURLに移動
  2. Googleの検索窓にアクセスして文字を入力
  3. 検索ボタンをクリックして検索

ブラウザを起動し指定のURLに移動

WebDriverを使ってブラウザを起動し、Googleのトップページに行くコードを書きます。

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.google.com")

WebDriverによりGoogle Chromeを起動し、任意のURLにアクセスします。(今回はGoogleトップページ)

要素へのアクセス

WebDriverで文字の入力やボタンのクリックをするためには、HTMLの要素にアクセスする必要があります。
 

seleniumによるブラウザ操作の自動化において重要な、要素のアクセス方法に関する図解


要素にアクセスする方法は色々ありますが、要素のidやclassなどを事前に知る必要があります。

driver.find_element_by_id(“任意のid”)
driver.find_element_by_class_name(“任意のclass”)
driver.find_element_by_name(“任意のname”)
driver.find_element_by_link_text(“任意のlink_text”)
driver.find_element_by_xpath(“任意のパス”)

それぞれdriver.find_elements_byにすると複数の要素を検索


要素へアクセスするための情報を調べる方法は簡単です。Googleのトップページを例に解説します。
 

html要素の検証の手順


アクセスしたい要素(画像ではGoogleの検索窓)のところで右クリックメニューから「検証」を押すと、HTMLソースが表示されます。

背景が灰色になっているところが選択中の要素です。この要素の中から「id」「class」「name」等を探します。

Googleの検索窓で要素アクセスに使えるのは「class」と「name」の2つです。

ちなみにHTMLソースで右クリック>Copy>Copy XPathで「XPath」を取得できます。「XPath」を使えば「id」「class」「name」等が不明でもアクセスすることが出来るので便利です。

今回は「name」を使って要素にアクセスします。
 

要素の検証を行った結果、Googleの検索窓は「name=”q”」、検索ボタンは「name=”btnK”」を持っていることが分かりました。
 

要素に対してアクションをおこす

要素へのアクセスが可能になったので、実際に要素の操作を行います。

今回使うのはclick()メソッドとsend_keys()メソッドの2つです。

クリック操作:click()
文字入力操作:send_keys(“任意の文字列”)

driver.find_element_by_name(“btnK”).click()のように書くと、name属性”btnK”を持つ要素を検索してクリック操作を行うということになります。
 

ここまでの内容をまとめると、ブラウザを操作して検索までを自動化するソースコードは以下のようになります。
 

from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get("https://www.google.com/")

search_box = driver.find_element_by_name("q")
search_box.send_keys("任意の文字列")
time.sleep(0.5)
search_btn = driver.find_element_by_name("btnK")
search_btn.click()

※文字入力の際に検索候補が表示されて干渉するせいかエラーが出るので、間に0.5秒間停止するコードを入れています(time.sleep(0.5))
 

1, 2行目:モジュールのインポート
4, 5行目:WebDriverによりGoogle Chrome起動
7行目:「name=”q”」の要素を検索
8行目:「name=”q”」の要素に対して「”任意の文字列”」を入力
10行目:「name=”btnK”」の要素を検索
11行目:「name=”q”」の要素をクリック
 

このようにSeleniumでは、要素を直接操作することで自動化を行います。HTMLにアクセスしやすい分スクレイピングにも向いていいるので、興味があればそちらも挑戦してみるといいでしょう。


以上がSeleniumでブラウザを自動で操作する手順です。

PyAutoGuiでブラウザ操作を自動化

次はWebDriverを使用せずにPyAutoGuiを用いてブラウザの操作を行います。

PyAutoGuiでの操作は、WebDriverの時と異なり、要素に直接アクセスしての操作は出来ません。そのため、PyAutoGuiによるGUI操作がメインです。

PyAutoGuiインストール

PyAutoGuiのインストールを行います。
コマンドプロンプトを起動して「pip install pyautogui」と入力してインストールします。

PyAutoGuiの機能を見たい方はこちら(英語サイト)

ブラウザを開く

Python標準のwebbrowserモジュールを使ってデフォルトに設定されているブラウザを開きます。

import webbrowser

webbrowser.open("https://www.google.com/")

任意の座標をクリックする

文字の入力を行うためには検索窓をクリックしないといけません。そこで、PyAutoGuiでクリック操作を行い、検索窓を入力受付状態にします。

pyautogui.click(x, y)
画面左上から(x, y)の座標をクリック

しかし、画面やブラウザの大きさが変わったりなど、クリックしたい位置が変わると使い物になりません。そこで使うのが画像認識です。

画像認識による特定座標のクリック

x, y = pyautogui.locateCenterOnScreen(“画像のファイル名”)

こちらが用意した任意の画像を画面上で探し、画像が見つかるとその中心座標が帰ってきます。これを使ってGoogle検索ボタンを画像認識して座標を取得し、認識した画像の位置を基準に操作します。

画像を用意する際には、Windows標準のSnipping Toolなどで画面の切り抜き保存をするのが有効です。今回は以下のようなGoogle検索ボタンの画像を用意しました。

この画像をダウンロードしてそのまま使用しても、解像度の違いなどから画像が一致せずエラーになる可能性が高いです。スクリーンショットかキャプチャソフトなどを使用して自分で画像を用意しましょう。

検索窓をクリックさせたいのですが、そのままだとGoogle検索ボタンをクリックしてしまいます。そのため、適当に座標を移動させて検索窓をクリックするようにします。

今回はx座標に+100, Y座標に-70で調整しました。

pyautoguiによるブラウザ操作の自動化に必要な、クリック座標についての図解
import pyautogui
import webbrowser
import time

webbrowser.open("https://www.google.com/")
time.sleep(0.5)
x, y = pyautogui.locateCenterOnScreen("search-button.png")
pyautogui.click(x+100, y-70)

※ページの読み込みが画像認識に間に合ってないのでsleep()を入れています。
※用意した画像が1ドットでも異なると、画像認識が出来ずエラーになります。エラーが出た場合は画像を取得しなおすか、認識する画面に動的な変化がないかなどを確認しましょう。

これで検索窓がクリックされて入力受付状態になります。

文字とキーの入力

入力受付状態になったら次は文字の入力を行います。

pyautogui.typewrite(“ninni_no_mojiretu”)
pyautogui.press(“任意のキー”)

typewrite()では入力の際にローマ字しか使用できません。一応、ローマ字漢字入力状態にしておくと日本語入力もできます。(ninni_no_mojiretu → にんい_の_もじれつ)

press()では任意のキー入力をすることが可能です。例えば、press(“enter”)のようにするとEnterキーを押すのと同じ効果が得られます。また、Enterキーだけでなくほかのキーも選択することも可能です。

PyAutoGUI’s documentationで他に使用できるキーの一覧を見ることができます。

ここまでのPyAutoGuiによる自動化の内容をまとめると、ソースコードは以下のようになります。

import pyautogui
import webbrowser
import time

webbrowser.open("https://www.google.com/")
time.sleep(0.5)
x, y = pyautogui.locateCenterOnScreen("search-button.png")
pyautogui.click(x+100, y-70)
pyautogui.typewrite("ninni_no_mojiretu")
pyautogui.press("enter")

1~3行目:モジュールのインポート
4行目:デフォルトブラウザでGoogleトップを表示
6行目:「serceh-box.png」で画像認識
7行目:認識した画像の中心座標からX座標に+100, Y座標に-70の位置をクリック
8行目:「ninni_no_mojiretu」を入力
9行目:Enterキーを入力

画像認識のための画像を用意する必要があるなど手間がかかりますが、直観的な自動化ができる分理解しやすいです。もともとあるブラウザを使用できる分、Chrome拡張機能やCookieなども利用できるので、Seleniumによる自動化とは一長一短です。
 

以上がPyAutoGuiによるブラウザ操作自動化の手順です。
 

ブラウザ操作の自動化をやってみよう

ブラウザの操作を自動化出来るようになると、日常生活でも様々な情報収集や煩雑なブラウザ操作を自動で行えるようになります。

api以外の自動化が規約違反になるサイト(Twitterなど)もあるので自動化するにも注意が必要ですが、使いこなせれば非常に便利です。

ソースコードを見てもらえれば分かるように、簡単なことであれば数行のコードで実現が可能なので、プログラミング初心者でも比較的簡単につくることができます。

ぜひブラウザ操作の自動化に挑戦してみてください。
 

広告