Python selenium - Chrome Driver

Pythonselenium で RPA を実装するにあたり、ChromeDriver というドライバをインストールして Chrome ブラウザをプログラムで動かすためのドライバをインストールします。

 

1. 

Chrome Driver のダウンロードサイトへ行き、 Chrome のバージョンと一致するインストーラを落とします。

chromedriver.chromium.org

 

私の Chrome は version 96 でした。

Chrome is up to date
Version 96.0.4664.93 (Official Build) (x86_64)

 

2.

ダウンロードしたファイルを解凍したら、 /usr/local/bin へ移動

Downloads % mv chromedriver /usr/local/bin

 

3. 

ChromDriver を起動すると下記のエラーが出ました。

chromedriver” cannot be opened because the developer cannot be verified.
Unable to launch the chrome browser"

 

4.

ぐぐったところ下記の処置で解決するらしく早速試す。

xattr -d com.apple.quarantine /usr/local/bin/chromedriver

 

5.

今回は成功したようです。

 
/usr/local/bin/chromedriver ; exit;
% /usr/local/bin/chromedriver ; exit;
Starting ChromeDriver 96.0.4664.45
(76e4c1bb2ab4671b8beba3444e61c0f17584b2fc-refs/branch-heads/4664@{#947}) on port 9515
Only local connections are allowed.
suggestions on keeping ChromeDriver safe.
ChromeDriver was started successfully.

 

辞書サイトの自動立ち上げ

今回は Django をお休みして自動化についてです。

 

【やりたいこと】

CSVファイルに英単語を10個格納します。

pythoncsvファイルを読み込みます。

・for で回して 「辞書サイトURL+英単語」に chrome でアクセスします。

・10個タブが立ち上がります。

 

利用者(私)がほしいものはそこまでです。

辞書で個々の英単語のページを読んで、内容を元々のリストに手動でコピペしていきます。

全部自動化したいのですが、作業を簡易化するためにいったん上記で運用を開始します。

csv と webbrower をインポートして、上記を実装するだけです。

次は selenium のインストールや設定をやっていきます。

import csv
import webbrowser

pip install pillow

pillow をインストールしました。

 

pip install pillow

--

Collecting pillow

  Downloading Pillow-8.4.0-cp38-cp38-macosx_10_10_x86_64.whl (3.0 MB)

     |████████████████████████████████| 3.0 MB 2.2 MB/s            

Installing collected packages: pillow

Successfully installed pillow-8.4.0

 

 

Migration のエラー対応内容

[動かして学ぶ | Python Django 入門 (Chapter 10)]

 

No migration to apply が出て、何が起こったのか不明だったため、メンターの方と確認して、下記のように対応しました。

 

 

1 ) settings_dev にsettings_commonの内容を追加

まず開発環境で作業して、その後 AWS にあげるところまでを書籍でやっているのですが、ひとまず settings_dev を読み込む設定をしているので  Databaseの設定が書かれていないことが原因と判断しました。

 

settings_common.py 作成時は settingsの内容をコピーしていたけども、settings_dev.pyは書籍の更新内容のみ記載していた。settings_common の import が機能していなかったのだから自力で検証できた内容だったかもしれない。

 

(ひとりでぐぐったときにはっきり settings を明示的に参照させてから切り分けろと書いてあったのにスルーしていた。。)

coderedirect.com

 

f:id:hoshikuzuloneliness:20211115235534p:plain

 

dev で common を import しているのですが、 PyCharm の画面上では反応がなく(色が変わらない)読み込んでいるのか不明です。

 

f:id:hoshikuzuloneliness:20211115235626p:plain

 

2) showmigrations の設定指定の方法を知らなかった

 

qiita.com

 

 

対処方法:
開発用設定(Database設定含むsettings_commonの内容を追加済み)を明示的に指定してターミナルで実行したところ、正常な結果が出力された。(3回目のマイグレーションを行ったので書籍とは異なり、0003 の更新内容が存在する)

 

実行コマンド:

python manage.py showmigrations --settings private_diary.settings_dev    

 

--settings でsettingsを指定できる。manage.pyのあるところから相対パスで private_diaryフォルダ下に settings_dev.pyがある。ここで private_diary/ と書きたくなるが python のルールでは private_diary. と記述する。(.py は不要)

 

結果:

account
 [X] 0001_initial
 [X] 0002_email_max_length
 [X] 0003_auto_20211107_0118
accounts
 [X] 0001_initial
admin
 [X] 0001_initial
 [X] 0002_logentry_remove_auto_add
 [X] 0003_logentry_add_action_flag_choices
auth
 [X] 0001_initial
 [X] 0002_alter_permission_name_max_length
 [X] 0003_alter_user_email_max_length
 [X] 0004_alter_user_username_opts
 [X] 0005_alter_user_last_login_null
 [X] 0006_require_contenttypes_0002
 [X] 0007_alter_validators_add_error_messages
 [X] 0008_alter_user_username_max_length
 [X] 0009_alter_user_last_name_max_length
 [X] 0010_alter_group_name_max_length
 [X] 0011_update_proxy_permissions
 [X] 0012_alter_user_first_name_max_length
contenttypes
 [X] 0001_initial
 [X] 0002_remove_content_type_name
diary
 (no migrations)
sessions
 [X] 0001_initial
sites
 [X] 0001_initial
 [X] 0002_alter_domain_unique

 

No migrations to apply 発生

 

1) PyCharm から migrate を実行すると No migrations to apply が発生する。

 

No migrations to apply.
Your models in app(s): 'account' have changes that are not yet reflected
in a migration, and so won't be applied.

 

2) Macのターミナルから showmigrations を実行してみた。

 python manage.py showmigrations

 

raise ImproperlyConfigured("settings.DATABASES is improperly configured. "
django.core.exceptions.ImproperlyConfigured: settings.DATABASES is improperly
configured. Please supply the ENGINE value. Check settings documentation for more
details.

 

ということで、DB設定が不適切ということで怒られました。

 settings.DATABASES is improperly configured. Please supply the ENGINE value.

 

settings.py(本件ではsettings_common.py)でDBの設定は下記のとおり。手詰まり。

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'private_diary',
'USER': os.environ.get('DB_USER'),
'PASSWORD': os.environ.get('DB_PASSWORD'),
'HOST': 'localhost',
'PORT': '',
}
}

 

3) エラーメッセージの指示に従って、makemigrations をPyCharm で実行してみる。 

OKが出たが、書籍の内容とは異なる。 (0001, 0002 が終わって 0003まで進んだってこと?)

/Users/y50xave/venv_private_diary/bin/python
/Users/y50xave/venv_private_diary/private_diary/manage.py makemigrations
Migrations for 'account':
/Users/y50xave/venv_private_diary/lib/python3.8/site-packages/allauth/account/
migrations/0003_auto_20211107_0118.py
- Alter field id on emailaddress
- Alter field id on emailconfirmation

Process finished with exit code 0

 

/Users/y50xave/venv_private_diary/bin/python /Users/y50xave/venv_private_diary/
private_diary/manage.py migrate
Operations to perform:
Apply all migrations: account, accounts, admin, auth, contenttypes, sessions, sites
Running migrations:
Applying account.0003_auto_20211107_0118... OK

Process finished with exit code 0

 

正常性確認ってどうすればよいのだろう。

 

4) DB

エラーが出ているのだから DBには反映されていない??

 

private_diary=# \dt;
List of relations
Schema | Name | Type | Owner
--------+--------------------------------------+-------+---------
public | account_emailaddress | table | y50xave
public | account_emailconfirmation | table | y50xave
public | accounts_customuser | table | y50xave
public | accounts_customuser_groups | table | y50xave
public | accounts_customuser_user_permissions | table | y50xave
public | auth_group | table | y50xave
public | auth_group_permissions | table | y50xave
public | auth_permission | table | y50xave
public | django_admin_log | table | y50xave
public | django_content_type | table | y50xave
public | django_migrations | table | y50xave
public | django_session | table | y50xave
public | django_site | table | y50xave
(13 rows)

private_diary=# select * from django_migrations
private_diary-# select * from django_admin_log
private_diary-# select * from django_session

 

 

Django 言語設定

settings.py (今回はカスタマイズした settings_common.py) の LANGUAGE_CODE で言語設定を変更し忘れていたので Django-allauth を使用した認証の箇所が英語のままでした。

 

f:id:hoshikuzuloneliness:20211106193304p:plain

 

日本語設定してブラウザから再読み込みする

# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'ja'

 

f:id:hoshikuzuloneliness:20211106193739p:plain

 

日本語 'ja'での正常動作を確認できたので、試しに韓国語にもしてみました。

 

# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'ko-kr'

 

f:id:hoshikuzuloneliness:20211106193442p:plain

 

実際多言語対応するとなるとHTML直書きしている箇所とかは別に対応することになるので、そのあたりは別途調べたい。

PyCharm と マークアップ入力時のトラブル

 

PyCharm の[Problem]でここに xxxx is not allowed here みたいな黄色エラーが出る場合は
単純にタグの閉じ忘れみたいなことが多いので、そのあたりのパターンを経験できたのはよかったと思う。


HTML のタグ (divとか)閉じ忘れ対策として PyCharm の [Problem] でチェック、
block の書き方が不完全な場合はエラーはいてくれるので実直に間違っている箇所を探すようにします。

 

【その他】
・unknown html tag だとまんま html の間違いでわかりやすいけど、
invalid block tag と出ていて href に url が抜けていたのが原因などあってクセがある。
・あと、大きなモニターがあれば防げたケアレスミスも多いのでモニター購入も検討したい。
・¥ を使ってそのままの箇所もあった。早めに英語キーボードに切り替えたい。