
phpとjavaくらいしか主に使わないんだけど、インターンの関係でちょっとPython触る機会があったので軽く勉強してみた![]()
Seleniumのwebdriverっていうのを使うと、ブラウザを開いて任意の言葉で検索したり、そのページのソースを取ってこれたり、スクショを撮ることができるらしい。
なんじゃそれは面白そうじゃんー!?ってことでやってみる。
まずPythonをインストールする。
環境変数にPythonを追加するため、一番下のところにチェックを入れて[Install Now]をクリック
特に問題がなければインストールが始まり、すぐ完了する。
python --version
を実行して、↑のようにバージョンが表示されていれば成功
次に、selenium をインストールする。
pip install selenium
最後に、ブラウザに合わせたドラーバーを用意する。
chrome、Firefox、PhantomJSがあるっぽい。(他にもあるのかも??)
今回はPhantomJSでやってみるが、基本的に方法は同じ。
PhantomJSはここからダウンロード
http://phantomjs.org/download.html
これで下準備は終了。
以下のコードを実行
# coding: UTF-8
from selenium
import webdriverdriver = webdriver.PhantomJS()
driver.set_window_size(1024, 768)
driver.get('https://google.com/')
#タイトルを表示
print(driver.title)
実行は、コマンドで
python [ファイル名].py
でできる。
"Google"と出てきたら成功。
上記のソースコードを下記のように変更
# coding: UTF-8
from selenium import webdrive
rdriver = webdriver.PhantomJS()
driver.set_window_size(1024, 768)
driver.get('https://google.com/')
#タイトルを表示
print(driver.title)
#スクリーンショットを撮る
driver.save_screenshot('screen.png')
#ブラウザを閉じる
driver.close()
同じようにコマンドから実行すると、ソースコードのフォルダに'screen.png'という名前で画像が保存される。
(png以外でも可能みたいだが、pngにしろやって怒られる)
名前にパスをつければそのフォルダに保存される。
こんな感じにグーグルのページが出てれば成功。
最後に、任意のワードで検索をかけてスクリーンショットを撮る、というのをやってみる。
# coding: UTF-8
from selenium import webdriver
searchWord = "たまごっち"
user_agent = 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36'
dcap = {
"phantomjs.page.settings.userAgent" : user_agent,
'marionette' : True
}
driver = webdriver.PhantomJS(desired_capabilities=dcap)
driver.set_window_size(1024, 768)
driver.get('https://google.com/')
#検索ワード入力
driver.execute_script("document.getElementById('lst-ib').value = '" + searchWord + "'")
#検索ボタンを探してクリック
driver.find_element_by_name("btnK").click()
#スクリーンショットを撮る
driver.save_screenshot('screen.png')
#ブラウザを閉じる
driver.close()
dcapとかuser_agentとかの設定をやらないと、なぜかできなかった…
理由とコレがなんなのかはよくわかってないです![]()
検索するワードを入れるときにも、
driver.find_element_by_id("ID").send_keys("strings")
コレを使うと何故かエラーに…
原因は今後調べてみます。
とにかく、「たまごっち」で検索かけて、そのスクリーンショットを撮る、というのができたわけです。
スクショの一部切り取ったもの。本当は全体が撮れています。
で、今直接ソース内に検索したいワードを入力していますが、これをコマンドから実行するときに与えるようにしてみます。
ソースを以下のようにちょっと変更
# coding: UTF-8from
selenium import webdriver
import sys
args = sys.argv
searchWord = args[1]
user_agent = 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36'
dcap = {
"phantomjs.page.settings.userAgent" : user_agent,
'marionette' : True
}
driver = webdriver.PhantomJS(desired_capabilities=dcap)
driver.set_window_size(1024, 768)
driver.get('https://google.com/')
#検索ワード入力
driver.execute_script("document.getElementById('lst-ib').value = '" + searchWord + "'")
#検索ボタンを探してクリック
driver.find_element_by_name("btnK").click()
#スクリーンショットを撮る
driver.save_screenshot('screen.png')
#ブラウザを閉じる
driver.close()
import sys
args = sys.argv
searchWord = args[1]
この3行を足しただけ。
argsってのはざっくりとしか理解していないんですが、コマンド引数のことらしく、
コマンド引数の1番目に検索したいワードを入れてね~っていう感じです。
というわけで、実行する際には
python [ファイル名].py [検索ワード]
とします。
実際にやってみると、
できてますな。
同じように、第2引数にはファイル名を設定します。
# coding: UTF-8
from selenium import webdriver
import sys
args = sys.argv
searchWord = args[1]
filename = args[2]
user_agent = 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36'
dcap = {
"phantomjs.page.settings.userAgent" : user_agent,
'marionette' : True
}
driver = webdriver.PhantomJS(desired_capabilities=dcap)
driver.set_window_size(1024, 768)
driver.get('https://google.com/')
#検索ワード入力
driver.execute_script("document.getElementById('lst-ib').value = '" + searchWord + "'")
#検索ボタンを探してクリック
driver.find_element_by_name("btnK").click()
#スクリーンショットを撮る
driver.save_screenshot(filename)
#ブラウザを閉じる
driver.close()
これで、「にほんごであそぼ」の検索結果のスクリーンショットが、一つ上のimageフォルダ内に保存されました。
こうすることで、例えばphpから呼び出して実行すること可能になります。
やってみたいところですがここまででめちゃくちゃ時間がかかってしまったので、それはまた時間のあるときに。
Selenium webdriverよく使う操作メソッドまとめ















