こんにちは。いとらーです。
パソコンで作業をしていて毎回同じことをして面倒だなと思ったことはないでしょうか?
この作業を自動化できたらかなり仕事が楽になりますよね。
Pythonならそんな夢のようなことが実現できるかもしれません。
今回はそのために必要なseleniumとwebdriverのお話をします。
Pythonのseleniumとは
seleniumはPythonのフレームワークで、ブラウザ操作を自動化する機能を持ちます。
これを使ってサイトに自動でログインしたり、自動で検索をかけてその結果を保存するみたいなことができます。
で、このseleniumを使ってとあるサイトにログインしてみようとしたのですが上手く動かなくて試行錯誤したのでその備忘録を残したいと思います。
まだまだ初学者ですので間違っている箇所もあるかとは思いますがその辺りは自己責任ということでお願いします。
で、まず最初にseleniumを使ったコードを記載します。
from selenium import webdriver options = webdriver.chrome.options.Options() profile_path = '/Users/itohiroki/Library/Application Support/Google/Chrome/' options.add_argument('--user-data-dir=' + profile_path) options.add_argument('--profile-directory=profile2') browser = webdriver.Chrome("./chromedriver",options=options) browser.get("https://www.xxxxxxxx.com/jp/")
今回のこの記事はこのコードの解説ということになります。
Pythonのseleniumを使うときのポイント
重要ポイント chromedriverについて
Pythonのseleniumを使うために重要なドライバーが一つ必要になります。
それがchromedriverです。
これは自動でGoogleChromeを動かすためのもので、このドライバーに「ああしてくれ、こうしてくれ」という命令をPythonのseleniumから出すと思ってくれて良いと思います。
seleniumが書かれた.pyのファイル→chromedriverが動く→指定したwebサイトが命令に従って自動で動く
そんな仕組みです。なので、この間に介在するchromedriverはめちゃ大事です。
seleniumを使うときのポイント
まず、seleniumを使うために必要なポイントを書きます。
chromeドライバーの準備に関して
・chromedriverをダンロードすること
・chromedriverのバージョン
・chromedriverの置き場所
seleniumのコードの記述に関して
・seleniumのコードを書くときのchromedriver自身のpathの記述について
・seleniumのコードを書くときのchromedriverのプロフィールpathの調べ方について
・seleniumのコードを書くときのchromedriverのプロフィールpathの記述について
ざっとこんな感じでしょうか。動かなかった時に必死にトライアンドエラーで試行した結果ですのでどれかは不要かもしれませんがその辺りは自己責任でお願いしますね。
chromedriverについて
chromedriverのダウンロードについて
chromedriverは下記サイトからダウンロードできます。
https://chromedriver.chromium.org/downloads
でもちょっと待ってください。このダウンロードするバージョンが超絶大事です。最新のものでもあなたがお使いのGoogleChromeのバージョンに合ってないと動きません。
調べ方ですが、GoogleChromeの検索窓に、
chrome://version
と打ち込んでみてください。
このようになってきて、僕のChromeのバージョンは、
93.0.4577.63
になっていることがわかります。だからchromeのバージョンは93ですね。
で、次にchromedriverのダウンロードをするのですが、これはこのChromeのバージョンより前のバージョンにしないと動かないようです。
上記のダウンロードのサイトにいくと、
このようになってきて、chromeのバージョンが93だったのでこの二つ目のリンクのchromedriverをダウンロードします。
chromedriverのダウンロード先と配置場所
で、このchromedriverをダウンロードしたらひとまずはダウンロードフォルダに入ると思います。
で、これは置き場所はどこでも良いみたいなのですが後でこの置き場所のpathという記述をしないといけないので、僕はこのseleniumを使う.pyのファイルが置いてあるのと同じフォルダにchromedriverという名称でドラッグアンドドロップで移動させておきました。
seleniumの書き方について
seleniumのコード
chromedriverの準備ができたらコードを書きましょう。
seleniumはあらかじめダウンロードしておいてください。
macのターミナルならpip install seleniumでできます。
もう一度冒頭のコードを。
from selenium import webdriver options = webdriver.chrome.options.Options() profile_path = '/Users/itohiroki/Library/Application Support/Google/Chrome/' options.add_argument('--user-data-dir=' + profile_path) options.add_argument('--profile-directory=profile2') browser = webdriver.Chrome("./chromedriver",options=options) browser.get("https://www.xxxxxxxx.com/jp/")
僕はこんな感じで書いて動かしました。まだ初学者なので間違っている部分はすみません。
seleniumのコードを書くときのchromedriver自身のpathの記述について
まず初めに上記のダウンロードしたchromedriverの置き場所のパスについて
これについてはchromedriver-binaryを入れている場合は必要がないらしいのですがひとまずchromedriverのみでやってみようということでchromedriverのパスについても記述します。パスというのはそのファイルが置かれている場所のことです。通常、パソコンの一番上位から階層になっているので順番に書いていきます。
7行目の”./chromedriver”がそれです。これはchromedriverが配置されているパスを意味しています。
つまりchromedriverがどこに置かれているのかが書かれています。
先の説明でダウンロード後に.pyのファイルがあるフォルダに移動させましたよね。なので今はこのseleniumのコードが書かれている.pyのファイルと同じ場所にあります。
./chromedriver
これはとても簡潔なパスの書き方で「相対パス」と言います。初めはとてもわかりにくいですよね。
パスの書き方の話になるのですが、この.(ドット)を書くことで一つ上のフォルダを意味するようになります。
今書いているのは.pyファイルですからそれが置いてあるフォルダのことを指します。で、/chromedriverとなっているのでそのフォルダの中入っているchromedriverファイルですよという意味です。
もしもここの話の意味がわからない場合はパスが理解できていないはずなので、相対パスで調べて勉強してみてくださいね。
プロフィールパスについて
プロフィールパスというのは今GoogleChromeを使っているユーザーの識別番号みたいなものでしょうか。
僕のプロフィールパスで言うと
profile_path = ‘/Users/itohiroki/Library/Application Support/Google/Chrome/’
の部分になります。
ここの記述は、先程のchromeのバージョン確認を行なった部分に記載されています。
この部分ですね。
書き出すと、
/Users/itohiroki/Library/Application Support/Google/Chrome/profile2
こうなっているのですが、Pythonのコードに記載するプロフィールパスは
/Users/itohiroki/Library/Application Support/Google/Chrome/
までになり、profile2は書きません。
じゃあprofile2は何なの?というお話になります。
これは僕自身が自分で作った空のフォルダです。
これがないとGoogleが勝手にフォルダをどんどん作って行ってしまっていました。これを自分で作ることによって情報がここに一元化されていきます。
で、このフォルダの作り方です。
macだけの説明で恐縮ですがwindowsでも基本は一緒かもです。
やり方は
/Users/itohiroki/Library/Application Support/Google/Chrome/
のパスを見てこれと同じようにフォルダを遡っていくのですが、macの場合はlibraryが標準では出ていないんです。
だから、画面をfinderにして(恐らく今はGoogle Chromeとかになっていると思うので)、
これです。
で、このバーの移動(英語ならGO)を押して、そこでキーボードのoptionキーを押すと突如libraryの項目が出てくるのでそこに移動してください。
後は順番にAppliation Support→Google→Chromeとフォルダを辿って、このChromeのフォルダどこでも良いので右クリックをして新しいフォルダーを作ってください。名前は何でも良いです。僕はprofile2にしています。慣れていない人はそのまま真似してください。
これでプロフィールパスは完成です。
プロフィールディレクトリについて
–profile-directory=profile2
次にこのような記述部分について。
これは今作った空のフォルダの名前を記述する部分です。
ここにこれからseleniumを使って自動ログインするときに必要な情報を書き溜めていくようです。よく分かっていませんが。
【追記】chromedriverのバージョンアップをしたとき
chromeはどんどんバージョンアップします。これを自動で更新している場合にはchromeのバージョンが上がってしまってchromedriverが対応できない場合があります。
そういう時には下記のようなアラートが出ます。
Message: session not created: This version of ChromeDriver only supports Chrome version 94
Current browser version is 96.0.4664.55 with binary path /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
このような時は対応したchromedriverをダウンロードしましょう。
ダウンロードはこちら。
https://chromedriver.chromium.org/downloads
ここからが大事なのですが、前のchromedriverは削除した方が良いです。
僕はよくも分からず沢山ダウンロードしてしまいました。
すると、
webdriver.Chrome()
このようにパスを書かずに動かすとどこか前のchromedriverが勝手に指定されてしまいます。結果、前のバージョンなので最新のchromeと合わずにいつまで経っても動きません。
なので過去のドライバーは削除しましょう。
そして、新しくダウンロードしたドライバーのファイルを前と同じところにおきましょう。
正確には前と同じじゃなくても良いのですが、この新しくダウンロードしたドライバーが置かれた場所のパスときちんと書いてこれを指定してあげます。
僕の場合はPythonのコードが置かれているのと同じ場所に置くことにしているので、
webdriver.Chrome(“./chromedriver”)
というように指定しています。
これ上手く動くようになります。
まとめ
以上のように記述することでseleniumを使って自動ログイン操作ができるようになりました。
何かの参考になれば幸いです。
それでは。
コメント