PythonとSeleniumでブラウザの自動操作
今回は、PythonからSeleniumを動かしてブラウザの自動操作をやってみます。
前回の「PythonのRequestsを使って検索結果を取得する」で、
うまく検索結果を取得できなかったサイトがあったので
今回はSeleniumを使用してみます。
Requestsで取得できなかったのは、見えないところで何らかのパラメーターを渡しているのか、
header情報が必要なのか、画面表示の際にJavaScriptが動いているようなので
これが何かをやっているのか等々なのですが、
ブラウザ操作からは簡単に結果を取得できるので
Requestsは早々に諦めてSeleniumを使ってみることにしました。
Seleniumとは?
ブラウザの自動操作ツールです。
Pythonから操作できるということで、Python勉強中の私は
勉強も兼ねてSeleniumを使ってみたいと思います。
まずはSeleniumのインストールです。
これはpipから行えます。
私はWindows環境なので、コマンドプロンプトを管理者権限で立ち上げて
以下のコマンドを実行します。
1 |
pip install selenium
|
すると以下のようにインストールされます。
1
2
3
4
5
|
Collecting selenium
Downloading selenium-3.0.2-py2.py3-none-any.whl (915kB)
100% |################################| 921kB 359kB/s
Installing collected packages: selenium
Successfully installed selenium-3.0.2
|
ブラウザはChromeを使いたいのですが、
ドライバが必要なようです。
ChromeDriverをダウンロードサイトからダウンロードします。
「Latest Release:」の後ろの「ChromeDriver 2.26」(2016/12/22現在)の
リンクをクリックするとファイル一覧が表示されます。
「chromedriver_win32.zip」をダウンロードします。
解凍すると「chromedriver.exe」というファイルが現れるので、
これをPythonファイルと同じフォルダ内に移動します。
Pythonのプログラムを実装
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
# -*- coding: utf-8 -*-
"""
Created on Thu Dec 22 16:32:48 2016
@author:
"""
import time
from selenium import webdriver
url = 'http://search.yahoo.co.jp/search'
keyword = 'python'
def search_web():
try:
browser = webdriver.Chrome('./chromedriver')
browser.get(url)
time.sleep(1)
search_input = browser.find_element_by_name('p')
search_input.send_keys(keyword)
search_input.submit()
time.sleep(1)
print(browser.page_source)
finally:
print('END')
if __name__ == '__main__':
search_web()
|
seleniumのwebdriverを使用するために、「from selenium import webdriver」を宣言します。
対象ページのURLと検索キーワードを設定しておきます。
search_web()内では、「webdriver.Chrome(‘./chromedriver’)」で
同じディレクトリ内にあるchromedriverを起動します。
「browser.get(url)」でブラウザにURLを渡します。
検索キーワードの入力ボックスのnameが「p」だったので、
「search_input = browser.find_element_by_name(‘p’)」として指定します。
「search_input.send_keys(keyword)」でキーワードをセットします。
「search_input.submit()」で検索を実行します。
検索結果は「browser.page_source」から取得します。
実際に実行してみると、まずchromedriverが起動し、
次にChromeが立ち上がります。
http://search.yahoo.co.jp/searchに移動し、
検索ボックスに「python」が入力されます。
さらに検索が実行され、検索結果ページが表示されました。
最後にChromeが閉じ、検索結果ページのソースが出力されました。
これだけ簡単な操作だと、実装コードも少なくて簡単ですね。
ちなみに、「検索」ボタンがsubmitではなくて、
onclickでJavasScriptを実行している場合は、
「search_input.submit()」の部分を下記で置き換えます。
1 |
browser.find_element_by_name('Search').click()
|