【HERO】ブラウザ自動操作入門

雑談

どうも梶松です。

今回はブラウザ自動操作入門編です。

ブラウザで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/cask
And then you can install it by running:
brew cask install chromedriver

いきなりエラー…だと。出力に従って実施していきます。

$ brew tap homebrew/cask
==> Tapping homebrew/cask
Cloning 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 0
Receiving 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 selenium
Downloading https://files.pythonhosted.org/packages/80/d6/4294f0b4bce4de0abf13e17190289f9d0613b0a44e5dd6a7f5ca98459853/selenium-3.141.0-py2.py3-none-any.whl (904kB)
100% |████████████████████████████████| 911kB 8.7MB/s
Collecting 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/s
Installing collected packages: urllib3, selenium
Successfully installed selenium-3.141.0 urllib3-1.24.2

 

 

これで環境の準備は整いました。

では実際に動かすプログラムを書いていきましょう。

 

  • プログラム作成
    • 自端末(iTerm等の黒いコンソール画面)内で以下を実施しプログラムを作成していく
    • “kajimatsu_selenium.py”は任意の名前で良いです。しかし末尾に”.py”をつけるようにしてください。
$ vi kajimatsu_selenium.py
    1. “i”を押して、以下を貼り付け
    2. “esc”を押して”wq”を入力し”Enter”を押す
from selenium import webdriver
driver = 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にアクセス

 

  • 実行
$ 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 webdriver
driver = 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番目の要素を取得する

 

  • 実行
$ python kajimatsu_selenium.py

 

 

  • 結果

意図したページをクリックすることができました。

定常的な作業であれば、windowsであればタスクスケジューラ、linuxであればcronなどで実行すれば ちょーラクチン

会社の勤怠がweb管理であれば、毎日9時に実施するように…www

大量の定常作業であればpythonとseleniumを用いれば数人分のタスクを一人で短時間にこなすことができ、これであなたは会社のヒーローです

 

雑談
ちょっと一息「DynamicConfigService」

こんにちは。 お久しぶりです。 カジマツです。 最近は多忙を極め、全然更新できてませんでした!!!! …

雑談
interop 2019 に行って来ました!!

こんにちは、木尾木公です。 AWS summitの事については既に書いていますが、 同日に、隣の会場 …

雑談
【Amazon】インフラエンジニアの商品紹介

どーも 梶松です。 最近はAWSの資格を取得しようと毎日勉強しています。 そんなことでよくAmazo …