僕の世界観を変えてみる

文系男子が趣味でプログラミングを勉強していくブログです。他にも日常で起きたどうでもいいことや愚痴を書いていきたいです。座右の銘は和を以て貴しとなすです。仲良くやろうよ。

【python3】bottlenoseとseleniumを使う際にハマったところ

f:id:htmllifehack:20171214195000j:plain

今まではmac book airにvirtual box入れてubuntu上でpythonをいじっていたんですが、

僕のmacは4GBなので、macに2GB、ubuntuに2GBで分けるとどうしても重くなってしまう。

なのでmacにpython入れればいいやと思いついたわけです。

なんで最初からやらなかったのか、自分でもわかりません。

やりたいことはAmazon API使って取り出した情報をseleniumでブラウザ操作すること、です。

詳しい話はあとで書くかもしれませんが、言わずともわかりますよね?楽したいんですよ。

ってことでmacでbottlenoseseleniumを使ってうまくいかないって人のために書きます。


HTTP error 400. Bad request

これはlinuxでも発生していてすごい時間を奪われました。

stackoverflowに”時間が同期されていないから”と書かれていました。

どうやらパソコンの時刻にズレが生じているとhttp error 400が返ってくるようです。

Time.is - 正確な時刻、どんな時間帯でも

このページにアクセスして”ちょうどぴったりです”と表示されるように同期する必要があります。

同期させるコマンドは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