elfen00’s blog

プログラミング(Python3,C++,Typescript,javascript)関連等とガジェット(Android)関連

Seleniumを使ってブラウザの自動化

Scriptを使ってブラウザ操作の自動化ができます

同じ操作をスレッドを使って並列化することもできます。 この方法ならPCのスペックや行うことにもよりますがおそらく50重起動くらいなら簡単にできるようになるでしょう。

はじめに

ブラウザで単純作業をするときにこれらを自動化ができます。 クロールやキャンペーンの応募、定期的な投稿などに使えることかと思います。 Twitterアカウント作成もできるかと思います。 Windows,Linux,Mac全てで使えるツールです。

準備

seleniumを使って実行します ここではPythonを使いますが他の言語にも対応しているはずです。 このツールは主にWebページをテストするためのツールです。

Python及びpipが入ってる人は

pip install selenium

Seleniumをインストールできます。

次にSeleniumで操作するためのブラウザを用意します。 Firefox,GoogleChrome,PhantomJS、Safari等が使えます。 ブラウザはPathを通しておくといいでしょう。(Pathを通していない場合はブラウザのパスを指定する必要があります)

このうちPhantomJSは描画しないためリソースを食わないで済むので最終的には全てPhantomJSで実行したいものです。これにより並列で大量の操作も可能です。

Linuxを使ってる人はPyVirtualDisplayを用いることでFirefoxでも描画しないようにできます。しかしこの場合は多少重いのでPhantomJSを使った方が良さそうです。

PhantomJSは実行ファイルをPathが通ったところに置いておくだけで使えます PhantomJSはバグが多く、更新によってバグが減っているのでなるべく最新版を使うといいと思います Linuxの場合aptにあるPhantomJSは古い場合が多いので公式サイトからダウンロードしてPathを通しておくといいと思います

ここではデバック用としてFirefox、実行用としてPhantomJSを使うことにします。

ブラウザによってUseragentの変更の仕方、プロキシの指定方法が異なるので注意が必要です。

Tutorial

Pythonインタプリタを用いて開発し、それをコードにまとめて実行するのを勧めます 例としてGoogleで検索を自動化してみます

>>> from selenium import webdriver
>>> br = webdriver.Firefox()
>>> br.get("http://google.com")

ここでFirefoxで右クリックから"要素を調査"を選び使用したい要素の一意なセレクタを確認します 検索フォームと検索ボタンの要素を確認するとそれぞれ

 #lst-ib  
 .jsb > center:nth-child(1) > input:nth-child(1)  

であることが確認できると思います これを確認した後インタプリタに戻って

>>> el = br.find_element_by_css_selector("#lst-ib")
>>> el.send_keys("github")
>>> br.find_element_by_css_selector(".jsb > center:nth-child(1) > input:nth-child(1)").click()

send_keysによって入力フォームに文字が入力され、3行目のClickで検索ボタンがクリックされることとなります

この要領でキャンペーンのフォーム入力をしていくことができると思います ある程度慣れたらhttps://selenium-python.readthedocs.org/を参考を読んでいくといいと思います