【python3】bottlenoseとseleniumを使う際にハマったところ
今まではmac book airにvirtual box入れてubuntu上でpythonをいじっていたんですが、
僕のmacは4GBなので、macに2GB、ubuntuに2GBで分けるとどうしても重くなってしまう。
なのでmacにpython入れればいいやと思いついたわけです。
なんで最初からやらなかったのか、自分でもわかりません。
やりたいことはAmazon API使って取り出した情報をseleniumでブラウザ操作すること、です。
詳しい話はあとで書くかもしれませんが、言わずともわかりますよね?楽したいんですよ。
ってことでmacでbottlenoseとseleniumを使ってうまくいかないって人のために書きます。
HTTP error 400. Bad request
これはlinuxでも発生していてすごい時間を奪われました。
stackoverflowに”時間が同期されていないから”と書かれていました。
どうやらパソコンの時刻にズレが生じているとhttp error 400が返ってくるようです。
このページにアクセスして”ちょうどぴったりです”と表示されるように同期する必要があります。
同期させるコマンドはntpdateを使います。
今回は独立行政法人 情報通信研究機構が提供しているNTPサーバに接続します。
まずターミナルを開いてください。
$ ntpdate ntp.nict.jp
これで時計が同期されたはずです。
Time.isに飛んでちょうどぴったりになっているか確認してください。
SSL: CERTIFICATE_VERIFY_FAILED
時刻の同期をした後はbottlenoseが使えてるはずです。
が、プログラムを走らせると今度はSSLエラーが発生しました。
全文はurllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:748)>です。
これはSSLの証明書が正しくないかららしいです。
ちょっとコードを追加しただけで動くようになります。
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
こちらのブログを参考にさせていただきました。
▲SSL証明書が正しくないサイトに対してPythonでアクセスする - 人生リアルタイムアタック
ubuntuだと出ないんですけどね。
仮想だからかな?関係ないか。
geckodriverを置く場所
seleniumでブラウザ操作する際に必要なドライバーです。
chromeのドライバーを入れようと思ったんですが、もともとubuntuで書いたコードはfirefoxだったので
これを再利用するためにgeckodriverを入れました。
保存先は/usr/local/bin
macだとFinderからアクセスできなかったのでターミナルから移動させました。
:Downloads user $ sudo cp -r geckodriver /usr/local/bin
ubuntuはGUIでbinまで行けなかったっけ?
ま、結局geckodriverはコピーできないからターミナルからやる羽目になったような?
geckodriverの種類
一応OSごとに種類があります。
macはmac用のgockodriver、ubuntuにはubuntu用のgeckodriverがあります。
よく見なかったのかなんなのかわかりませんがgeckodriverが認識されなくてここも時間かかりましたね。
結局サイトからもう一度ダウンロードしてきたらうまくいきました。
geckodriverでうまくいかなかったら保存先とドライバーの種類とバージョンを確認したほうがいいかもしれません。
再度ダウンロードすればできるようになるかも?
まとめ
これで無事MacでもLinuxでも使えるようになりました。
僕出先だとmacなんですよ。
家ではWindows使ってます。
そうすると環境が変わってくるからなのか同じコードなのに片方では動くのに片方では動かないなんてことも起こります。
そう考えるとクラウド上でpython開発ができる環境のが良さそうですね。
cloud9とか気になっているんですけどAmazonに買収されたとかなんとか。
AWSで行うとかなんとか。
とりあえずjupyter notebookは設定しました。
データ分析とかもちょっと興味があるので何か作ったら書こうかなーって思います。
独学でやってるとハマった時が大変ですけどググる能力が上がりますねw