質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

Q&A

2回答

4200閲覧

SeleniumでGoogleアカウントにログインした状態でChromeを起動する方法

yomoanyan

総合スコア14

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

0グッド

1クリップ

投稿2023/06/23 00:27

編集2023/06/24 01:55

実現したいこと

Seleniumを使ってGoogleアカウントにログインした状態でChromeを起動したいです。

前提

https://senablog.com/python-selenium-google-login/
https://tkstock.site/2023/01/22/selenium-browser-session-login-cookie/
これらのサイトを参考に下のコードを作成しました。

発生している問題・エラーメッセージ

Traceback (most recent call last): File "/Users/takayuki-k/Desktop/書道/submit_figs.py", line 18, in <module> driver = webdriver.Chrome(ChromeDriverManager().install(), options=options) TypeError: WebDriver.__init__() got multiple values for argument 'options'

引数を複数与えていることが原因となっていますが、参考にしたサイトではうまくいっているようです。どのように修正すれば良いのでしょうか?

該当のソースコード

Python

1from selenium import webdriver 2from webdriver_manager.chrome import ChromeDriverManager 3from selenium.webdriver.chrome.options import Options 4import time 5 6profile_path = '/Users/usrname/Library/Application Support/Google/Chrome' #usernameには自分のアカウント名を入れた 7#account_name = 'Default' #User Data/(xxx)に表示されている名前、メインアカウントは基本「Default」に保存されているはずです 8 9options = Options() 10options.add_argument('--user-data-dir=' + profile_path) 11#options.add_argument(f'--profile-directory={account_name}') #コメントを付け替える f の意味はよくわからない 12options.add_argument('--profile-directory=Default') 13options.add_argument('--disable-dev-shm-usage') 14 15 16# ドライバー定義 17driver = webdriver.Chrome(ChromeDriverManager().install(), options=options) 18# ウィンドウサイズ固定(フレキシブルなタグ構成でエラーになると面倒なので) 19driver.set_window_size(1200,1000) 20 21# グーグルアカウント上にログイン情報を保存しているURL 22login_url = 'https://www.google.com/?authuser=0' 23 24# URLにアクセス 25driver.get(login_url) 26 27# デバック用 28time.sleep(3) 29#driver.close() 30driver.quit()

試したこと

otn様、tmp様ありがとうございます。
以下のサイトに似た質問があり、これもやってみたところエラーは出ないのですが、ブラウザが立ち上がりませんでした。

stackoverflowと同じようにコードを書き実行しましたが、chromedriverの場所は違う場所でした。申し訳ございません。

このサイト( https://office54.net/python/module/python-selenium-chrome )にも同じようなことが書かれているのを見つけ、次のようにコードを書き直しました。

Python

1from selenium import webdriver 2from webdriver_manager.chrome import ChromeDriverManager 3from selenium.webdriver.chrome.service import Service 4import time 5 6options = webdriver.ChromeOptions() 7 8#options.add_argument('--headless') 9#options.add_argument('--no-sandbox') 10#options.add_argument('--disable-dev-shm-usage') 11 12options.add_argument('--disable-gpu'); 13options.add_argument('--disable-extensions'); 14options.add_argument('--start-maximized'); 15options.add_experimental_option("excludeSwitches", ['enable-automation']) 16 17service = Service(executable_path=r'/Users/takayuki-k/Desktop/書道/chromedriver_mac64/chromedriver') #どちらでもChromeは立ち上がりました 18#service = Service(executable_path = ChromeDriverManager().install()) 19 20driver = webdriver.Chrome(service=service, options=options) 21 22login_url = 'https://www.google.com/' 23 24driver.get(login_url) 25 26time.sleep(5) 27 28driver.quit()

こちらのサイト( https://senablog.com/python-selenium-chrome-option/ )によると、options.add_argument('--headless')の記述がバックグラウンドでの起動を行うもののようで、ウィンドウが表示されなかったものと思われます。

しかし、相変わらずログインした状態でChromeは起動しませんでした。引き続き調べてみますが、何か助言等いただけましたら幸いです。よろしくお願いいたします。

https://stackoverflow.com/questions/76428561/typeerror-webdriver-init-got-multiple-values-for-argument-options

補足情報

mac OS 11.7.4
Python 3.10.5
selenium 4.10.0
Google Chrome 114.0.5735.133
Chrome Driver 114.0.5735.90

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2023/06/23 03:00 編集

> 以下のサイトに似た質問があり、これもやってみたところエラーは出ないのですが、 やってみたというやり方が間違っていたのでしょうね。 どうやったのかのコードを書くと、間違いを指摘してもらえるでしょう。
tmp

2023/06/23 02:51

stackoverflowの通りやればいいと思いますが、 ■エラーの原因 stackoverflowの通りバージョンアップにともってなって、 webdriver.Chromeの引数が変わってしまってでてるエラーだそうですね 昔 webdriver.Chrome(executable_path=DEFAULT_EXECUTABLE_PATH, port=DEFAULT_PORT, options: Options = None, service_args=None,引数ありすぎ省略 新 webdriver.Chrome(options: Options = None,service: Service = None,keep_alive: bool = True) 具体的には、最初の引数がexecutable_pathでなくoptionsに変わったので driver = webdriver.Chrome(ChromeDriverManager().install(), options=options) と書くと1番目の引数optionsにChromeDriverManager().install()と2番目のoptions=optionsで 二回optionsをセットしていますね。 なので症状が同じなので、バージョン違いが原因ですね。 ■立ち上がらない原因と思われるもの 具体的にどう試したか書いていませんので、stackoverflowのままだとすると service = Service(executable_path=r'/usr/bin/chromedriver') と書いたなら/usr/bin/chromedriverにドライバーが、あなたの環境にあるでしょうか? serviceでドライバーのパスの指定をあなたの質問のコードに書き換えると service = Service(executable_path= ChromeDriverManager().install()) driver = webdriver.Chrome(service=service, options=options) でどうでしょうか? ■そのほか 書いた内容は、ほぼstackoverflowのままです。 影響の受けたcommitのリンクもついてるしstackoverflowの回答がいいと思います。 また、参考にしたサイトが古いバージョンを使ってるから問題なく動いていたのだと思います。 あなたはバージョン違いの為に混乱したのですから、あなたも使用したバージョンを明記したほうが良いと思います。
otn

2023/06/23 14:25

> options.add_argument('--headless')の記述がバックグラウンドでの起動を行うもののようで、ウィンドウが表示されなかったものと思われます。 他人の書いたサイトのコードを参考にするのは良いですが、参考にするのでなく、意味を理解しないままでコピペして実行するのは止めましょう。 で、意味を理解したので、この行を削除して実行したのですよね? 途中の試行錯誤分だけを載せるのでなく、最終的にどんなコードを実行して、どうなったのか(「どうならなかった」でなく)を書きましょう。
yomoanyan

2023/06/23 14:31

最終的に上のコードを実行して、ログアウトされた状態のGoogleChromeが立ち上がり、コード上のurlのページを5秒間開いた後、ブラウザを閉じました。以上です。
otn

2023/06/23 15:08 編集

失礼しました。削除せずにコメント化しただけだったのですね。 > 最終的に上のコードを実行して、ログアウトされた状態のGoogleChromeが立ち上がり、コード上のurlのページを5秒間開いた後、ブラウザを閉じました。以上です。 と、ブラウザが起動したのであれば、とりあえず、 > このサイト( ~)にも同じようなことが書かれているのを見つけ、次のようにコードを書き直しました。 のコードは期待通り動いたと言うことだと思うので、元のコードはこれを踏まえて修正したのでしょうか? それでもログインできなかった?元のコードを修正済みであれば示してください。
yomoanyan

2023/06/23 15:20

回答ありがとうございます。 確かにまだ、元のコードは修正しておらず、tmp様の回答への回答に終始しておりました。ある程度修正を試みた上で、難しそうであったら、再度お聞きしたいとお思います。 あと、 > 他人の書いたサイトのコードを参考にするのは良いですが、参考にするのでなく、意味を理解しないままでコピペして実行するのは止めましょう。 肝に銘じておきます。
otn

2023/06/23 15:40

「該当のソースコード」のコードの、 driver = webdriver.Chrome(ChromeDriverManager().install(), options=options) を、2つ目のコードのように書き直せば良いかと思います。 service = Service(executable_path=ChromeDriverManager().install()) driver = webdriver.Chrome(service=service, options=options)
yomoanyan

2023/06/24 01:42

お返事遅くなり申し訳ありません。 できました!ありがとうございます!
guest

回答2

0

次のようなコードで解決できました。
tmp様、otn様には深く感謝申し上げます。

追記
解決できておりませんでした。やはりログインはされていない状態でchromeが立ち上がりました。すでに開いていたchromeが立ち上がり、ログインされているように見えただけでした。はやとちりでした、申し訳ございません

引き続き調べてみますが、難しそうな感じがしてきました。

Python

1from selenium import webdriver 2from webdriver_manager.chrome import ChromeDriverManager 3from selenium.webdriver.chrome.options import Options 4from selenium.webdriver.chrome.service import Service 5import time 6 7 8profile_path = '/Users/[UserName]/Library/Application Support/Google/Chrome' #[1]のサイトに書かれているようにプロフィールパスを書く 9 10options = Options() 11options.add_argument('--user-data-dir=' + profile_path) 12options.add_argument('--profile-directory=Default') 13options.add_argument('--disable-dev-shm-usage') 14 15 16# ドライバー定義 17#service = Service(executable_path = ChromeDriverManager().install()) 18service = Service(executable_path=r'/Users/[UserName]/Desktop/書道/chromedriver_mac64/chromedriver') #こちらに変更した 19driver = webdriver.Chrome(service=service, options=options) 20 21# ウィンドウサイズ固定(フレキシブルなタグ構成でエラーになると面倒なので) 22driver.set_window_size(1200,1000) 23 24# グーグルアカウント上にログイン情報を保存しているURL 25login_url = 'https://www.google.com/?authuser=0' 26 27# URLにアクセス 28driver.get(login_url) 29 30# デバック用 31time.sleep(3) 32driver.quit() 33

イメージ説明

イメージ説明
参考にしたサイト
[1]https://senablog.com/python-selenium-google-login/
[2]https://stackoverflow.com/questions/76428561/typeerror-webdriver-init-got-multiple-values-for-argument-options
[3]https://office54.net/python/module/python-selenium-chrome
[4]https://senablog.com/python-selenium-chrome-option/

投稿2023/06/24 01:51

編集2023/06/24 19:26
yomoanyan

総合スコア14

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2023/06/24 10:42

とりあえず、手動で、コマンドプロンプトから、 chrome.exeのフルパス --user-data-dir=適切なパス --profile-directory=Default を実行してみましょう。これで駄目ならSeleniumは関係ありません。プロファイルがおかしい。
yomoanyan

2023/06/24 19:30 編集

ありがとうございます。上のコードを書き換え、写真を追加しました。 やはり厳しそうです。どの解説サイトもおおよそ1年以上前であり、現在までにより自動ログインに厳しくなったという可能性があるように感じるのですが、その点いかがでしょうか? また、上の画像のように右上のアイコンは自分のアカウントのアイコンになったのですが、Googleアカウントへのログインはされていないようです(その下のアイコン)。 いまいちよくわかっていない上での質問なのですが、GoogleアカウントとChromeのプロファイルは異なるものですよね?(Googleアカウントは個人の情報を管理するもの、プロファイルはアカウント情報を管理するもの、という認識で間違い無いでしょうか) 上のコードだと使用するプロファイルの指定を行なっており、それは正しくできているように思います(実際にアイコンが変わっているため)。これはGoogleアカウントへのログインも同時に本来(できた書いてある解説記事たちが書かれた時期)はできていたということなのでしょうか?もしそうでないなら、上のコードはプロファイルのみ選択し、アカウントへのログインは行わない、という正しい挙動をしているように感じます。 逆に解説記事たちが書かれた時期には同時にログインもできていたのなら、もう今ではアカウントへのログインは不可能という結論に至るように思われます。
guest

0

この回答はGPT-4による自動生成回答です

以下のようにコードを修正してみてください。

Python

1from selenium import webdriver 2from webdriver_manager.chrome import ChromeDriverManager 3from selenium.webdriver.chrome.options import Options 4import time 5 6profile_path = '/Users/usrname/Library/Application Support/Google/Chrome' #usernameには自分のアカウント名を入れた 7#account_name = 'Default' #User Data/(xxx)に表示されている名前、メインアカウントは基本「Default」に保存されているはずです 8 9options = Options() 10options.add_argument('--user-data-dir=' + profile_path) 11#options.add_argument(f'--profile-directory={account_name}') #コメントを付け替える f の意味はよくわからない 12options.add_argument('--profile-directory=Default') 13options.add_argument('--disable-dev-shm-usage') 14 15 16# ドライバー定義 17driver = webdriver.Chrome(executable_path=ChromeDriverManager().install(), options=options) 18# ウィンドウサイズ固定(フレキシブルなタグ構成でエラーになると面倒なので) 19driver.set_window_size(1200,1000) 20 21# グーグルアカウント上にログイン情報を保存しているURL 22login_url = 'https://www.google.com/?authuser=0' 23 24# URLにアクセス 25driver.get(login_url) 26 27# デバック用 28time.sleep(3) 29#driver.close() 30driver.quit()

webdriver.Chrome() の引数に executable_path を追加して、ChromeDriverManager().install() をその値として渡すことで、エラーが解消されるはずです。

投稿2023/06/23 00:27

teratail-ai

Powered by GPT-4

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問