Pythonをそもそも初めて使ったのですが、
その時に苦労したことをメモ書き
環境
python3.7
Django2
pydrive
selenium
chromedriver
CentOS7.0
OSがCentOS6だとchromedriverが動かない
CentOS7にあげる
ローカルだと動くのに, Webから動かすとバグが出た
エラーを記録するのを忘れたのだが
python3.5の標準機能のバグでした。
python3.7にupgradeするとうまくいきました.
日本語の情報がなかったので
pydrive crontabで実行するとエラー
エラー内容
File "/home/XXXX/.pyenv/versions/3.7.0/lib/python3.7/site-packages/pydrive/auth.py", line 388, in LoadClientConfigFile
raise InvalidConfigError('Invalid client secrets file %s' % error)
pydrive.settings.InvalidConfigError: Invalid client secrets file ('Error opening
file', 'client_secrets.json', 'No such file or directory', 2)
修正箇所
# Google Drive 認証を行う
google_auth = GoogleAuth()
credential_path = os.path.join(DIR_PATH,'credentials.json')
# DIR_PATHは自身の絶対PATH
store = Storage(credential_path)
credentials = store.get()
google_auth.credentials = credentials
# ここを追加するとcrontabで動かしても大丈夫になりました
google_auth.LoadClientConfigFile(DIR_PATH + 'client_secrets.json')
# client_secrets.json も絶対PATHで指定
drive = GoogleDrive(google_auth)
これ解消するのにめっちゃ時間かかった.
外部ファイルimport(Djangoとローカルで動きが違う)
python3からimportの挙動が変わったようだ.
importされる側 のファイルをaa.pyとすると
エラー内容(Djangoでは動くが,ローカルで動かそうとしたとき)
Traceback (most recent call last):
File "importする側.py", line 38, in <module>
from . import aa
ImportError: cannot import name 'aa' from '__main__' (importする側.py)
修正
importする側.py
if __name__ == '__main__':
# こちらローカルで動かすとき
import aa
main()
else:
# こちらDjangoで動かすとき
from . import aa
main()
これでとりあえずは大丈夫
Chromeの開き過ぎのエラー
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: chrome not reachable
(Session info: headless chrome=68.0.3440.84)
(Driver info: chromedriver=2.38.552522 (437e6fbedfa8762dec75e2c5b3ddb86763dc9dcb),platform=Linux 3.10.0-862.9.1.el7.x86_64 x86_64)
scraping.py
# pythonからシェルコマンドを動かす
import subprocess
def scraping:
try:
for i in range(100) :
# とりあえずたくさん開く
driver.get(url) # urlは実際のURLを入れてください
finally:
driver.quit() # これだけだとバグが出るケースがある。
# 下を追加
subprocess.call("killall chrome",shell=True)
subprocess.call("killall chromedriver",shell=True)
シェルでkillallさせる。とりあえずこれで動く。
ps aux|grep chrome
これで消えているか確認する
だいぶ走り書きをしてしまったが、今度清書するかもしないかも