【初心者向け】VSCode+Python+Selenium+ChromeDriverを使って、chatGPTにWordPressに自動ログインするプログラムを作成させてみた

プログラミング

みなさんこんにちは。ブログを書いていて、ブログを書き始めるまでが面倒で投稿するのが億劫だと思うことありませんか?
私はWordPressにいちいちログインするまでの工程が面倒だと感じることがあります。
そこで、今回はせっかくなので話題のchatGPTさんに面倒なログイン作業を自動的にしてくれるプログラムを作ってもらおうと思います。

もちろん今回はWordPressへの自動ログインですが、他のWebサービスにも応用できますのでぜひ応用してみてください。

◆前提
chatGPTにログイン可能であること

◆目的
WordPressにログインする工程を自動化すること

◆手段・ツール・言語
chatGPT、VSCode、Python、Selenium、ChromeDriver

手順は知っているから結果だけ知りたいという方は、下記の目次から「【まとめ】最終的なソースはこちら」をクリックして飛んでください。

【手順1】chatGPTにやりたいことを指示する

下記のようにWebサイトにログイン後、入力欄にやりたいことを入力する。

今回は下記のように指示してみました。

【指示】
「PythonとSeleniumを使ってWordpressに自動ログインするプログラムを作成して!」

すると下記のような返答をいただきました。

はい、以下はPythonとSeleniumを使用してWordPressに自動ログインするプログラムの例です。事前にSeleniumライブラリをインストールしてください。

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

# WordPressのログインページにアクセス
driver = webdriver.Chrome()
driver.get("https://your_wordpress_login_url.com/wp-admin")

# ユーザー名とパスワードを入力してログインする
username_field = driver.find_element_by_id("user_login")
username_field.send_keys("your_username")

password_field = driver.find_element_by_id("user_pass")
password_field.send_keys("your_password")
password_field.send_keys(Keys.RETURN)

上記のプログラムでは、まずSeleniumのwebdriverを使用してChromeを開き、WordPressのログインページにアクセスします。次に、ユーザー名とパスワードを入力し、Keys.RETURNを使用してEnterキーを押すことでログインします。必要に応じて、your_wordpress_login_url.comyour_username、およびyour_passwordを実際の情報に置き換えてください。

すごい、、凄すぎる!!
ものの10秒ほどで返答してくれました。

【手順2】chatGPTに不明点を質問してみる

【手順1】の回答で不明な点は追加で質問してみましょう。

【質問】
「Seleniumライブラリをインストールする方法を教えて!」

Seleniumライブラリをインストールするには、以下の手順に従ってください。

  1. Pythonをインストールする(インストールされていない場合)。
  2. コマンドライン(Windowsの場合は「コマンドプロンプト」、macOSまたはLinuxの場合は「ターミナル」)を開きます。
  3. 次のコマンドを実行します。
pip install selenium
  1. インストールが完了するまで待ちます。インストールが成功すると、コマンドラインに「Successfully installed selenium」と表示されます。

Seleniumを使用する前に、ChromeやFirefoxなどのWebブラウザのドライバーをダウンロードして、PATHを通す必要がある場合があります。詳細については、Seleniumの公式ドキュメントを確認してください。

実施方法だけでなく、使用上の注意点まで説明してくれます。
特に最後の方の「Seleniumを使用する前に〜〜」の部分は前提となるため重要です。
ただ、今回はSeleniumやPython、VSCode(コーディングするためのツール)を用意する手順は長くなるのて割愛します。
用意できていない方は下記の投稿の手順1〜4を参考にしてみてください。

【手順3】実際にコーディングしてみる

では実際に言われた通りにやってみましょう。

回答してくれたコードの右上の「Copy code」をクリックしてコピー

VSCodeで新規ファイルを作成し、上記のコードをペースト

Pythonなので「wordPressAutoLogin.py」という名前で保存します。

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

# WordPressのログインページにアクセス
driver = webdriver.Chrome()
driver.get("https://your_wordpress_login_url.com/wp-admin")

# ユーザー名とパスワードを入力してログインする
username_field = driver.find_element_by_id("user_login")
username_field.send_keys("your_username")

password_field = driver.find_element_by_id("user_pass")
password_field.send_keys("your_password")
password_field.send_keys(Keys.RETURN)

では実行してみましょう。
※注意
Python+Seleniumを実行する際には下記のように同じ階層に「chromedriver」(Chromeの場合)を配置してください。

では、PyhonファイルをVSCodeで実行してみましょう。

あれ、、やはり何かしらのエラーが起こりましたね。。

エラー内容をchatGPTさんに聞いてみましょうか。

エラーの対処をchatGPTに質問してみる

先ほどのエラーについて下記のように質問してみました。

【質問】
「先ほど教えてくれた手順でPythonとSeleniumを使ってWordpressに自動ログインするプログラムを実行してみたら下記のエラーが出たんだけど対処方法を教えて! selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in PATH.」

このエラーは、Google Chromeドライバー(chromedriver)がインストールされていないか、またはPATHが正しく設定されていないことを示しています。

Google Chromeドライバーをダウンロードして、PATHを設定する必要があります。以下は、Google Chromeドライバーをダウンロードして、Windowsの場合にPATHを設定する方法の例です。

  1. Google Chromeドライバーをダウンロードします。以下のURLにアクセスして、最新バージョンをダウンロードしてください。 https://sites.google.com/a/chromium.org/chromedriver/downloads
  2. ダウンロードしたzipファイルを解凍します。
  3. chromedriver.exeファイルを、Pythonのインストールディレクトリ\Scriptsフォルダに移動します。デフォルトの場合、PythonのインストールディレクトリはC:\Python3xで、ScriptsフォルダはC:\Python3x\Scriptsにあります。
  4. システムの環境変数に、Pythonのインストールディレクトリ\Scriptsフォルダを追加します。
  5. コマンドラインでchromedriverを実行し、エラーが発生しないことを確認します。

以上の手順でGoogle Chromeドライバーをインストールして、PATHを設定したら、プログラムを再度実行してください。

めちゃくちゃ早くて的確な回答をいただきました!

そうです。その通りです。実は先ほどのソース上にはchromedriverのパスが設定されていなかったからエラーになっていました。
なので下記のようにwebdriver.Chromeの後にパスを追記してあげましょう。

# WordPressのログインページにアクセス
driver = webdriver.Chrome(executable_path="/Users/go/Desktop/Python/chromedriver")

ではこの状態で実行してみましょう。
現在のソースは下記のようになります。

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

# WordPressのログインページにアクセス
driver = webdriver.Chrome(executable_path="/Users/go/Desktop/Python/chromedriver")
driver.get("https://your_wordpress_login_url.com/wp-admin")

# ユーザー名とパスワードを入力してログインする
username_field = driver.find_element_by_id("user_login")
username_field.send_keys("your_username")

password_field = driver.find_element_by_id("user_pass")
password_field.send_keys("your_password")
password_field.send_keys(Keys.RETURN)


実行、、!

自動プログラムは起動しました!
(画面左上に「Chrome は自動テスト ソフトウェアによって制御さてれています。」と表示されているため正常)

しかし、サイトにアクセスできませんでした。

これも原因は分かっています。遷移先のURLが誤っているからです。
なぜならURLが下記の記載になっており、存在しないためです。

「https://your_wordpress_login_url.com/wp-admin」

こちらはあくまでchatGPTさんがサンプルで作成してくれたURLのため、URL記載内容は各自で変えてくれということになります。

なので、私がいつもログインしている画面の下記URLを指定してあげます。

# WordPressのログインページにアクセス
driver = webdriver.Chrome(executable_path="/Users/go/Desktop/Python/chromedriver")
driver.get("https://wakulog.com/wp-login.php")

これで実行してみましょう。

ちゃんとログイン画面まで遷移しました!

しかし、ユーザ名とパスワード入力まではできませんでした。

なぜでしょう?これもchatGPTさんに聞いてみましょう!

エラーの対処をchatGPTに質問してみる2

【質問】

下記に記載されたPythonとSeleniumを使ってWordpressに自動ログインするプログラムを実行してみましたが、username_field.send_keys("your_username")の箇所で自動的にユーザ名が入力されませんでした。どのようにしたらユーザ名が自動入力されるかな?
from selenium import webdriver from selenium.webdriver.common.keys import Keys # WordPressのログインページにアクセス driver = webdriver.Chrome() driver.get("https://your_wordpress_login_url.com/wp-admin") # ユーザー名とパスワードを入力してログインする username_field = driver.find_element_by_id("user_login") username_field.send_keys("your_username") password_field = driver.find_element_by_id("user_pass") password_field.send_keys("your_password") password_field.send_keys(Keys.RETURN)

自動入力が機能しない場合は、いくつかの原因が考えられます。

  1. フィールドが正しく見つからない:フィールドのIDが正しく指定されているか、またはフィールドが存在しているか確認してください。
  2. ページが正常に読み込まれていない:Webページが完全に読み込まれているか確認してください。time.sleep()を使用して、ページが完全に読み込まれるまで待機することができます。
  3. ウェブサイトがCAPTCHAによって保護されている場合:CAPTCHAが表示される場合は、手動で解除する必要があります。

試していただきたいこととしては、以下のいずれかの方法を試すことが挙げられます。

  1. send_keys()関数による自動入力の代わりに、execute_script()関数を使用してJavaScriptを実行し、フィールドに値を設定します。次のようなコードを試してください。
username_field = driver.find_element_by_id("user_login")
driver.execute_script("arguments[0].value='your_username';", username_field)
  1. send_keys()関数の前に、username_field.click()を呼び出して、フィールドをクリックするようにします。次のようにコードを変更してみてください。
username_field = driver.find_element_by_id("user_login")
username_field.click()
username_field.send_keys("your_username")

どちらの方法でも解決しない場合は、WebページのHTMLを確認し、フィールドの詳細を確認してください。

本当にすごいこれは、、!
めちゃくちゃ丁寧にいくつかの解決案を提示してくれます!しかも早い!

今回は上記回答のうち、[3−2.]の手段を試してみます。
「2. send_keys()関数の前に、username_field.click()を呼び出して、フィールドをクリックするようにします。(以下略)」

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

# WordPressのログインページにアクセス
driver = webdriver.Chrome(executable_path="/Users/go/Desktop/Python/chromedriver")
driver.get("https://wakulog.com/wp-login.php")

# ユーザー名とパスワードを入力してログインする
username_field = driver.find_element_by_id("user_login")
username_field.click()
username_field.send_keys("your_username")

password_field = driver.find_element_by_id("user_pass")
username_field.click()
password_field.send_keys("your_password")
password_field.send_keys(Keys.RETURN)

これでどうでしょうか?実行!!

残念。こちらのソースでも上手くいきませんでした。

では質問を変えてトライしてみましょう。

エラーの対処をchatGPTに質問してみる3

【質問】

下記に記載されたPythonとSeleniumを使ってWordpressに自動ログインするプログラムを実行してみましたが、username_field.send_keys("your_username")の箇所で自動的にユーザ名が入力されませんでした。ページが正常に読み込まれてから自動入力されるようにしたいのですが、どうしたら良いでしょうか? from selenium import webdriver from selenium.webdriver.common.keys import Keys # WordPressのログインページにアクセス driver = webdriver.Chrome() driver.get("https://your_wordpress_login_url.com/wp-admin") # ユーザー名とパスワードを入力してログインする username_field = driver.find_element_by_id("user_login") username_field.send_keys("your_username") password_field = driver.find_element_by_id("user_pass") password_field.send_keys("your_password") password_field.send_keys(Keys.RETURN)

WebDriverWaitexpected_conditionsを使用して、フィールドが表示されるまで待機することができます。次のようにコードを変更してください。

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# WordPressのログインページにアクセス
driver = webdriver.Chrome()
driver.get("https://your_wordpress_login_url.com/wp-admin")

# ユーザー名とパスワードを入力してログインする
username_field = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "user_login")))
username_field.send_keys("your_username")

password_field = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "user_pass")))
password_field.send_keys("your_password")

password_field.send_keys(Keys.RETURN)

ここで、WebDriverWait関数はドライバーを最大で10秒間待機させ、指定された要素が見つかるか、待機時間が経過するまで繰り返し要素を検索します。expected_conditionsモジュールを使用して、presence_of_element_located関数を指定し、指定された要素が表示されるまで待機することができます。

上記のように回答をいただけました。
しかも元のソースを参考にして、修正までしてくれます。
修正して実行してみましょう。下記のようなソースになります。
※最後の行は実際にログインする際にEnterを押すため、ここでは一旦コメントアウトして実行します。
※ユーザ名・パスワード・webdriverのパスは各自のものに設定してください。

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# WordPressのログインページにアクセス
driver = webdriver.Chrome(executable_path="/Users/<各自のユーザ名>/Desktop/Python/chromedriver")
driver.get("https://wakulog.com/wp-login.php")

# ユーザー名とパスワードを入力してログインする
username_field = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "user_login"))
)
username_field.send_keys("your_username")

password_field = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "user_pass"))
)
password_field.send_keys("your_password")

# テストのため下記コメントアウト
# password_field.send_keys(Keys.RETURN)

では実行!

できました!!!
ソースを実行後、自動的にWordPressのログイン画面にアクセスし、ユーザ名とパスワードを入力する工程を自動的に行なってくれました!

現状、上記のソースはユーザ名・パスワードを入力後、Enterを自動押下する部分はコメントアウトしています。その部分を復活させて再度実行してみたら正常にログインまでできました!

【まとめ】最終的なソースはこちら

色々なエラーが起きましたが、全てchatGPTさんに聞けば簡単に解決しました。

最終的なソースは下記になります。
※ユーザ名・パスワード・webdriverのパスは各自のものに設定してください。

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# WordPressのログインページにアクセス
driver = webdriver.Chrome(executable_path="/Users/<各自のユーザ名>/Desktop/Python/chromedriver")
driver.get("https://wakulog.com/wp-login.php")

# ユーザー名とパスワードを入力してログインする
username_field = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "user_login"))
)
username_field.send_keys("<各自のユーザID>")

password_field = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "user_pass"))
)
password_field.send_keys("<各自のパスワード>")

password_field.send_keys(Keys.RETURN)

これで自動操作プログラムの初歩的なプログラムは製造できました。

【補足】ワンクリックで自動操作させる方法

自動操作できるようになりましたが、ここまでのプログラムはVSCodeをわざわざ開いて下記の実行ぼたんをクリックして実行していました。

自動操作なのにVSCodeを手動で開いて実行しないといけないの?と思う方がいると思います。

全くその通りです。もっと簡単にWordPressログインまでの工程を自動化させたいですよね?
例えば、デスクトップにワンクリックするだけで自動操作プログラムが実行されるような。

なので、次にデスクトップからワンクリックでWordPressへログインする方法をchatGPTさんに聞いてみたいと思います。

【質問】
「mac でpythonのプログラムをデスクトップからワンクリックで起動させるためには」

MacでPythonのプログラムをデスクトップからワンクリックで起動させるためには、以下の手順を実行します。

  1. プログラムファイルを作成する まずはPythonで実行したいプログラムファイルを作成します。例えば、Desktopに「myscript.py」というファイル名で保存します。
  2. 実行権限を設定する ターミナルを開き、以下のコマンドを実行して、myscript.pyに実行権限を与えます。
chmod +x ~/Desktop/myscript.py
  1. Automatorアプリを起動する LaunchpadやSpotlight検索などから、「Automator」というアプリを起動します。
  2. ワークフローを作成する 「新規作成」をクリックし、「サービス」という項目を選択します。
  3. アクションを追加する 以下の手順でアクションを追加します。
  • 「ユーティリティ」カテゴリを選択し、「シェルスクリプトを実行」アクションをダブルクリック
  • 「シェルスクリプトを実行」アクションの「シェル」プルダウンメニューから「/bin/bash」を選択
  • 「パス」に以下のコマンドを入力します。
    python ~/Desktop/myscript.py
  1. ワークフローを保存する 「ファイル」メニューから「名前を付けて保存」を選択します。保存場所は「サービス」フォルダーにしてください。また、「名前」欄に任意の名前を入力します。

これで、デスクトップ上のmyscript.pyをダブルクリックするだけで、Pythonプログラムが実行されます。また、ファインダーの右クリックメニューに表示されるサービスにも追加されるため、ファイルを右クリックしてコンテキストメニューから実行することもできます。

では実際にやってみたいと思います。

まずは作成したプログラムをデスクトップに置いて、と。

Pythonプログラムに実行権限を与える、と。
※下記参考

% chmod +x ~/Desktop/wordPressAutoLogin.py

Automatorアプリを起動する、と。

新しい「アプリケーション」を作成(新規書類をクリック)すると下記のような画面が出てきました。
こちらの「ワークフロー」のところをクリック

言われた通りに「ユーティリティ」→「シェルスクリプトを実行」をダブルクリック

シェルスクリプトの実行文を作成し、ワークフローを保存します。
保存場所は「サービス」フォルダーと記載されていますが、おそらくアプリケーションフォルダのことでしょう。

保存をした後に、デスクトップのwordPressAutoLogin.pyをダブルクリックしてみましたが、Pythonプログラムは自動的に実行されませんでした。。。。

chatGPTは上手くいかない時ももちろんあるわけで。。。

残念ながら全てをchatGPTさんに頼ることは難しかったです。
これ以降はchatGPTさんに全て質問するのは非効率すぎると判断したため、「デスクトップからダブルクリックでPythonを実行」する方法はネットでググってみることにしました。

最も簡単そうなアンサーとして、下記の手順でOKかと思います。参考までに。

1.「test.command」というファイル名を作成

2.「test.command」に下記を記載する

cd `dirname $0` # カレントディレクトリに移動
python wordpressLogin.py # Pythonファイルを実行

3.Pythonファイルと同じ場所に「test.command」を配置

4.「test.command」を右クリックし、「エイリアスを作成」をクリックし、任意の名前に変更

5.作成したエイリアスをデスクトップに移動

6.エイリアスをダブルクリック

これでダブルクリックをするだけで自動的にWordPressへアクセスしログインするまでの工程を自動的に行なってくれます。

上記の手順が最も簡単なシェルの作成方法かと思いますので、参考まで。

chatGPTから得た教訓

今回得た教訓として、下記の3点が挙げられる。

1.当たり前だが、chatGPTは全知全能というわけではなく、一般的な回答をしてくれるだけで、自分の環境に適した回答をもらえない可能性もあるということ。

2.大前提として、chatGPTさんの最新データが2021年9月※までのもののため、もらった回答を全てを鵜呑みにしてはいけないこと。

3.自分が作ったソースの改善点を得るためや、エクセルなど数式が苦手な人には良いかもしれない。ちょっとした知恵を借りたい時などは非常に早く分かりやすく答えてくれるため良い。

みなさんも猫の手でも借りたい際には是非chatGPTを利用してみてはいかがでしょうか?

※chatGPTさんの最新データ

コメント

タイトルとURLをコピーしました