どうも梶松です。
今回はブラウザ自動操作入門編です。
ブラウザでwebサイトにアクセスする作業等が発生した際にヒーローになれます。
使用するのは”Python“と”selenium“です。両方使用したことがない梶松でもできたので誰でもできます!!!
- 本記事を参考に実施可能なこと
- ブラウザで特定のサイトへの自動アクセス
- webサイト上でのボタンクリックなどの自動操作
- 実施環境
- OS:macOS Mojave(version:10.14.4)
- ブラウザ:chrome
- 言語:Python 3.7.2
- chromedriverインストール
- chromedriver: web ブラウザ(chrome)を外部のソフトウェアから操作したり情報を取得したりできるようにするためのもの
$ brew install chromedriver |
Error: No available formula with the name "chromedriver"It was migrated from homebrew/core to homebrew/cask.You can access it again by running:brew tap homebrew/caskAnd then you can install it by running:brew cask install chromedriver |
いきなりエラー…だと。出力に従って実施していきます。
$ brew tap homebrew/cask |
==> Tapping homebrew/caskCloning into '/usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask'...remote: Enumerating objects: 4109, done.remote: Counting objects: 100% (4109/4109), done.remote: Compressing objects: 100% (4094/4094), done.remote: Total 4109 (delta 24), reused 646 (delta 13), pack-reused 0Receiving objects: 100% (4109/4109), 1.32 MiB | 4.79 MiB/s, done.Resolving deltas: 100% (24/24), done.Tapped 1 command and 4001 casks (4,114 files, 4.2MB). |
順調。brew tapって何だろ…調べてみました。
どうやら”brew tap ユーザー名/リポジトリ名”で公式以外でgithub上に公開しているリポジトリからhomebrewに取り込むことができる便利コマンドのようだ。つまり今回はhomebrewというユーザのcaskというリポジトリから取り込んできたということか、フムフム
$ brew cask install chromedriver |
==> Satisfying dependencies==> Downloading https://chromedriver.storage.googleapis.com/73.0.3683.68/chromedriver_mac64.zip######################################################################## 100.0%==> Verifying SHA-256 checksum for Cask 'chromedriver'.==> Installing Cask chromedriver==> Creating Caskroom at /usr/local/Caskroom==> We'll set permissions properly so we won't need sudo in the future.Password:==> Linking Binary 'chromedriver' to '/usr/local/bin/chromedriver'.chromedriver was successfully installed! |
こちらも順調。あれ、”brew cask”ってなんだっけ。また調べてみました。
“cask”というのはhomebrewの拡張機能のことで、GUIのアプリもコマンドラインからインストールできるとのこと。え、めっちゃ便利やんけ
- seleniumインストール
- selenium: Webブラウザ回りのテストを自動化するツール群
$ pip install selenium |
Collecting seleniumDownloading https://files.pythonhosted.org/packages/80/d6/4294f0b4bce4de0abf13e17190289f9d0613b0a44e5dd6a7f5ca98459853/selenium-3.141.0-py2.py3-none-any.whl (904kB)100% |████████████████████████████████| 911kB 8.7MB/sCollecting urllib3 (from selenium)Downloading https://files.pythonhosted.org/packages/df/1c/59cca3abf96f991f2ec3131a4ffe72ae3d9ea1f5894abe8a9c5e3c77cfee/urllib3-1.24.2-py2.py3-none-any.whl (131kB)100% |████████████████████████████████| 133kB 15.3MB/sInstalling collected packages: urllib3, seleniumSuccessfully installed selenium-3.141.0 urllib3-1.24.2 |
- Google chromeのインストール
- ここがわかりやすかった
これで環境の準備は整いました。
では実際に動かすプログラムを書いていきましょう。
- プログラム作成
- 自端末(iTerm等の黒いコンソール画面)内で以下を実施しプログラムを作成していく
- “kajimatsu_selenium.py”は任意の名前で良いです。しかし末尾に”.py”をつけるようにしてください。
$ vi kajimatsu_selenium.py |
-
- “i”を押して、以下を貼り付け
- “esc”を押して”wq”を入力し”Enter”を押す
from selenium import webdriverdriver = webdriver.Chrome("/usr/local/bin/chromedriver")driver.get(url) |
解説
-
- ‘from selenium import webdriver’
- seleniumモジュールからwebdriver関数をインポートする
- ‘url=”https://www.kajimatsu.com”‘
- url変数に”https://www.kajimatsu.com”アクセスしたいURLを格納
- ‘driver = webdriver.Chrome(“/usr/local/bin/chromedriver”)’
- chromeを動かすためのドライバを読み込む’webdriver.Chrome(“chromedriverの存在するフルパス”)’
- おそらく”/usr/local/bin/chromedriver”だが、見つからなければ’$ find . -name “chromedriver”‘で捜索
- ‘driver.get(url)’
- googleを開き、2行目で指定したURLにアクセス
- ‘from selenium import webdriver’
- 実行
$ python kajimatsu_selenium.py |
- 結果
- URLの下に”Chromeは自動テストソフトウェアによって制御されています”と表示された状態で意図したサイトにchromeで自動アクセスできれば成功です。
- 次はwebサイトアクセス後に特定の記事(リンク先)をクリックしてみましょう
- ここからはプログラムを編集していくだけの簡単な作業です!
- HTMLの要素取得
- クリックしたいwebサイトにアクセスし”ページのソースを表示”をクリック
-
- 今回は”【ハマった】Cisco841Mの罠”の記事にアクセスしてみましょう
この記事にたどり着くためにhtmlの要素を確認します(今回https://www.kajimatsu.comでやったためにclassやidの要素でのクリックができなかったごめんなさい)
“a”タグの何番目に該当するかを確認して要素取得していきましょう。
“【ハマった】Cisco841Mの罠”は”<a”で検索したところ上から3番目にあることがわかった
プログラムで記載するときは0を起点とするため、3(番目) – 1 = “2”を引数として渡してあげる
-
- プログラム編集
$ vi kajimatsu_selenium.py |
from selenium import webdriverdriver = webdriver.Chrome("/usr/local/bin/chromedriver")driver.get(url)elements = driver.find_elements_by_tag_name('a')elements[2].click() |
解説
-
- ‘elements = driver.find_elements_by_tag_name(‘a’)’
- “a”というタグの要素を取得する
- ‘elements[2].click()’
- “a”というタグの上から3番目の要素を取得する
- ‘elements = driver.find_elements_by_tag_name(‘a’)’
- 実行
$ python kajimatsu_selenium.py |
- 結果
意図したページをクリックすることができました。
定常的な作業であれば、windowsであればタスクスケジューラ、linuxであればcronなどで実行すれば ちょーラクチン
会社の勤怠がweb管理であれば、毎日9時に実施するように…www
大量の定常作業であればpythonとseleniumを用いれば数人分のタスクを一人で短時間にこなすことができ、これであなたは会社のヒーローです