ViIlage
@ViIlage

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Python・seleniumライブラリを使ったブラウザ操作について

解決したいこと

Python初学者です。
会社のPCでブラウザ操作の自動化を行いたいのですが、うまくいきません。扱いたいブラウザはEdgeです。

コード1ではブラウザの立ち上げは問題なくできるのですが、Edgeがログイン状態にできません。

そこでいろいろ調べてコード2を作りました。
これならEdgeのログイン状態は保持できるのですがコードの処理が終わりません。
この原因が分かりません。
私としてはこのコード2を使ってブラウザ操作に進みたいと考えております。
解決方法を教えていただけないでしょうか。
よろしくお願いいたします。

###コード1

#seleniumライブラリからWEBドライバーを取得する"webdriverクラス"とWebドライバーサービスを管理する"Service"クラスをインポートする。
from selenium import webdriver
from selenium.webdriver.edge.service import Service

#Webドライバーのパス取得して変数に格納する
driver = webdriver.Edge(service = Service("C:/system/web driver/Edge/Version 112.0.1722.84/msedgedriver.exe"))

#getメソッドを使って指定したURLをEdgeで立ち上げる
url_1 = "https://www.google.co.jp/"
driver.get(url_1)

###コード2

from selenium import webdriver

# Microsoft Edgeの実行可能ファイルのパスを指定します
edge_path = "C:/Program Files (x86)/Microsoft/Edge/Application/msedge.exe"

# WebDriverのオプションを設定します
options = webdriver.EdgeOptions()
options.add_argument(f'--remote-debugging-port=9222')

# WebSocket URLを指定してWebDriverのインスタンスを作成します
driver = webdriver.Edge(executable_path=edge_path, options=options)

driver.get("https://www.google.co.jp/")

webドライバーのバージョンははブラウザに合わせています。

0

2Answer

###コード2 で

from selenium import webdriver
wd  = "C:¥temp¥msedgedriver.exe"
url = "https://www.google.co.jp/"
driver = webdriver.Edge(executable_path=wd)
driver.get(url)

先ずは、確実な場所にドライバを配置しましょう。wd = "C:/temp/msedgedriver.exe"でもいけるかも?

webドライバーのバージョンはブラウザに合わせています?????

cd C:¥temp¥
msedgedriver.exe
msedge.exe

にて実行し、バージョン番号を記載すると信憑性が深まりますよ!

opt = webdriver.EdgeOptions()
opt.add_argument(f'--remote-debugging-port=9222')
opt.add_argument(f'--remote-debugging-address=0.0.0.0')
webdriver.Edge(executable_path=wd, options=opt)

成功したらオプションを考えましょう。
思わずfコピペしましたが、fいるの? pythonのfは何か確認して下さい。

0Like

Comments

  1. これならEdgeのログイン状態は保持できるのですがコードの処理が終わりません。

    コードの処理が終わらないとは具体的にどのような状況でしょうか?
    ログイン状態は保持できるということから "https://www.google.co.jp/" はブラウザで表示できているかと思うのですが、何らかの処理が走ったままになってしまい強制終了するまでコマンドを受け付けないといった状態でしょうか?

    また、webdriver を開いた場合は最後に必ず quit で閉じるようにしてください。
    webdriver のプロセスが残り続けることになってしまいます。

    try:
      driver = webdriver.Edge(executable_path=wd)
      ...
    finally:
      driver.quit()
    
  2. @ViIlage

    Questioner

    ご回答ありがとうございます。ChatGPTを活用して作ったのであまり分かってない部分もあります。
    どうやら"f"はformat関数のような使い方ができる書き方のようですが今回の場合いらなそうですね。
    @HalHarada
    ご回答いただいたコードをWEBドライバーのパスをしていして次のように実行したのですが、Edgeブラウザのサインインができずコード1と同じ結果になってしまいました。

    以下実行したコード

    from selenium import webdriver
    wd  = "C:/system/web driver/Edge/Version 112.0.1722.84/msedgedriver.exe"
    url = "https://www.google.co.jp/"
    driver = webdriver.Edge(executable_path=wd)
    driver.get(url)
    
    opt = webdriver.EdgeOptions()
    opt.add_argument('--remote-debugging-port=9222')
    opt.add_argument('--remote-debugging-address=0.0.0.0')
    webdriver.Edge(executable_path=wd, options=opt)
    
    

  3. @ViIlage

    Questioner

    @doranko
    コード2について

    VScodeで実行した際に

    driver = webdriver.Edge(executable_path=edge_path, options=options)
    

    で処理が継続している様子です。2分30秒ほど処理が継続したのちエラーになります。
    Edgeではブラウザは指定したGoogleのサイトではなくMicrosoftのデフォルトのHPになります。
    image.png

  4. @ViIlage
    webdriverではなく実行可能ファイルを直接していしていることが原因かも知れません (詳細には調査していないのであくまで予想ですが)。
    コード1の方法で素直にプロファイルの場所を指定するのが簡単かと思います。

    options = Options()
    # プロファイルパスの指定
    options.add_argument('--user-data-dir=C:\\Users\\ユーザ名\\AppData\\Local\\Microsoft\\Edge\\User Data')
    
    edge_service = Service(EdgeChromiumDriverManager().install())
    driver = webdriver.Edge(service=edge_service, options=options)
    

    Edge のプロファイルの場所は "C:\Users\ユーザ名\AppData\Local\Microsoft\Edge\User Data" だと思いますが、念のため Edge で "edge://version/" にアクセスしてプロファイル パスと書かれている場所を参照してください。
    (末尾の \Default は無視してください。)

    Microsoft Edge failed to start: exited normally.

    のようなエラーが発生する場合はバックグラウンドで Edge のプロセスが動いていることが原因のようですので、User Data を適当な名前でコピペしてそちらを指定してあげれば起動するかと思います。

    以下に私の環境で正常動作が確認できたコードを提示します。

    import time
    
    from selenium import webdriver
    from selenium.webdriver.edge.options import Options
    from selenium.webdriver.edge.service import Service
    from webdriver_manager.microsoft import EdgeChromiumDriverManager
    
    if __name__ == "__main__":
        try:
            options = Options()
            # パスの区切り文字は \\ とする
            # User Data を指定すると上記エラーになったので、同じ場所に SeleniumUserData としてコピペした
            options.add_argument('--user-data-dir=C:\\Users\\ユーザ名\\AppData\\Local\\Microsoft\\Edge\\SeleniumUserData')
            edge_service = Service(EdgeChromiumDriverManager().install())
            driver = webdriver.Edge(service=edge_service, options=options)
    
            driver.get("https://google.com")
            time.sleep(3)
        finally:
            driver.quit()
    

どうやら問題は

driver = webdriver.Edge(service=service, options=options)

の"service"にあるようです。
このserviceを次のようにするとそれぞれ問題があります。

①service = Service(executable_path=edge_path)
・Edgeのログインはできている。
・処理が継続してしまい次のコードに進めない。

②service = Service("C:/system/web driver/Edge/Version 112.0.1722.84/msedgedriver.exe")
・Edgeのログインができない
・その後のブラウザ操作はできる。

0Like

Your answer might help someone💌