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

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

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

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

Python

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

selenium

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

Q&A

解決済

1回答

5063閲覧

seleniumでChromeを操作する際のプロキシサーバーでの動作について

chem_search

総合スコア30

Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

Python

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

selenium

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

0グッド

0クリップ

投稿2021/12/05 07:11

前提・実現したいこと

プロキシサーバー経由でインターネットアクセスしている環境下で、
seleniumを用いてGoogle Chromeを操作し、あるWeb操作の自動化を考えています。
普段はインターネットにアクセスする際、ポップアップウィンドウに
IDとパスワードを入力しないと接続できません。

web操作の自動化の部分は、プロキシサーバーを通さない状態ではうまくいきました。
(具体的には、find_element_by_css_selectorを使うものです。)
簡単に、下記のコードを例として質問させてください。

動かしたいソースコード

Python

1from selenium import webdriver 2from selenium.webdriver.chrome.options import Options 3 4options = Options() 5 6#追加欄 7 8DRIVER_PATH = "hoge" 9driver = webdriver.Chrome(executable_path = DRIVER_PATH) 10driver.get("hogehoge") 11 12#実際にはここにやりたい動作が入る 13 14

追加欄の部分と動作、質問したいこと

【前提】
まず、上述したように上記のソースコード(追加欄の部分に何も入力しない状態)をプロキシサーバーを
経由しない環境で動かすと、特に問題なく動作しました。

【プロキシサーバー環境下での動作1】
これをプロキシサーバー経由の環境下で動かすと、
手動でインターネットにアクセスするサイト同じようにIDとパスワードの入力欄が立ち上がります。
ここに手動でIDとパスワードを入力すると、目的のサイトにはアクセスするのですが、

NoSuchElementException: Message: no such element: Unable to locate element: ~

とエラーが出ます。
プロキシサーバーではない環境では出なかったエラーです。

質問①: 同じコードでも、プロキシサーバーを経由した場合とそうでない場合で動作が異なる(cssタグを見つけられるのと見つけられない)ということはあるのでしょうか?
なお、この後の質問でログインの自動化についてもご質問させて頂きますが、最終的にはログインの動作は手動で行ってもかまいませんので、上記の問題の解決法があればそれだけでも教えて頂きたいです。

【プロキシサーバー環境下での動作2】

ログインの動作部分の自動化を目的に、上記コードの追加欄に下記のコードを追加しました。

python

1 2PROXY = "hoge:○○" 3PROXY_AUTH = "ID:Pass" 4 5options.add_argument("--proxy-server=http://%s" % PROXY) 6options.add_argument("--proxy-auth=%s" %P ROXY_AUTH) 7options.add_argument("--proxy-server='direct://'") 8

すると、ブラウザに「このサイトにアクセスできません( ERR_NO_SUPPORTED_PROXIES)」と出ます。

【プロキシサーバー環境下での動作3】
上記コードの追加欄に、下記のコードを追加しました。

python

1 2PROXY = "hoge:○○" 3PROXY_AUTH = "ID:Pass" 4 5options.add_argument("--proxy-server=http://%s" % PROXY) 6options.add_argument("--proxy-auth=%s" % PROXY_AUTH) 7options.add_argument("--proxy-server='direct://'") 8options.add_argument("--proxy-bypass-list=*") 9 10

すると今度は、
「このサイトにアクセスできません。hogehogeからの応答時間が長すぎます。(ERR_CONNECTION_TIMED_OUT)」
と出ます。

**質問②:**上記の方法ではプロキシサーバー環境下で自動ログインをさせることはできないのでしょうか。

よろしくお願いいたします。

補足情報(FW/ツールのバージョンなど)

python = 3.8.5
selenium = 3.141.0
Google Chrome = 96.04664.45

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

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

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

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

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

guest

回答1

0

ベストアンサー

質問①: 同じコードでも、プロキシサーバーを経由した場合とそうでない場合で動作が異なる(cssタグを見つけられるのと見つけられない)ということはあるのでしょうか?

無いはずです(ChromeやSeleniumにバグが無い限り)。
同じプログラムで、同じサイトへのアクセスして、proxyの有無だけ変えてテストしたのでしょうか?

自分の管理下で無いサイトの場合は、Proxy経由かどうかで動作を変えている可能性もゼロでは無いです(そんなことをするのは考えにくいですが)。念のため、HTMLが期待通りかも確認した方がいいでしょう。

質問②:上記の方法ではプロキシサーバー環境下で自動ログインをさせることはできないのでしょうか。

Chromeのコマンドラインオプションで認証付きProxyを越える手段は無いはずです。
中継用の認証無しProxyサーバーを立ち上げて、認証情報をつけて認証付きProxyサーバーに中継するしか無いようです。
認証無しの場合のサンプル:

Python

1options.add_argument("--proxy-server=192.168.0.200:8888")

投稿2021/12/05 09:26

otn

総合スコア84808

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

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

otn

2021/12/05 09:42

少なくともWindowsであれば、Windowsの設定でProxyを設定しておけばChromeはそれに従うはずですが。
chem_search

2021/12/06 02:38

解答ありがとうございます。 まず、質問2について、対処は難しいとのこと、理解しました。 質問1についてですが、全く同じソースコードで、Wifiの接続先をプロキシがあるものにした時は上記の症状が出て、プロキシがないものにした時は問題なく動きます。 これが厳密にプロキシだけの有無となっているかは知識不足で分からなかったのですが、他にも変化する部分があるのでしょうか。 また、HTMLが期待通りかというのは、プロキシの有無の異なる接続で、HTMLの記述が変化しているかどうか、ということでしょうか?
otn

2021/12/06 05:52

> また、HTMLが期待通りかというのは、プロキシの有無の異なる接続で、HTMLの記述が変化しているかどうか、ということでしょうか? はい。そういう意味でもありますが、エラーの現象が出ている時のそのブラウザ環境でのHTMLを直接確認しているか?という質問です。
chem_search

2021/12/06 09:20

ご回答ありがとうございます。 先程確認しまして、cssセレクターのターゲットになっているHTMLはどちらも同じであることは確認しました。 それ以外の部分が影響を与えうる可能性はあるのでしょうか?
otn

2021/12/06 09:30

find_element_by_css_selectorを実行する直前時点での、driver.page_sourceの中に目的のノードがあるのであれば、取得できるはずとしか言い様がないですが、driver.page_sourceを確認したと言うことでしょうか?
chem_search

2021/12/06 22:59

ご指摘ありがとうございます。 上で回答したものは、私がプロキシありと無しの環境で、手作業でHTMLを確認したものです。 ご指摘頂いたdriver.page_sourceで確認したところ、プロキシ無しの場合ではHTMLが取得できていましたが、プロキシありの環境で実行すると、 <html><head></head><body></body></html>とだけ表示されました。 ブラウザでは目的のページが表示されているのですが、何が起こっていると考えればよいのでしょうか?
otn

2021/12/07 11:35

> ブラウザでは目的のページが表示されている その「ブラウザ」というのはSelemiumが起動しているブラウザのことですか? そのブラウザで開発者ツールでみるとHTMLがちゃんと目的のノードまであるのに、 同じブラウザでdriver.page_sourceをみるとBODYが空ということ?
chem_search

2021/12/07 13:58

もし誤解がありますと申し訳ないので、できるだけ詳細に記述します。 上記の追加欄に何も入れないコードをプロキシのある環境下で実行すると、chromeが起動して、ログインのためのポップアップウインドウが立ち上がり、手動でIDとパスワードを入力すると、目的のページに遷移します。 このときブラウザには「Chromeは自動テストソフトウェアによって制御されています」と出ています。 しかし、この時に目的としていた動作は行われず、driver.page_sourceを出力すると一つ前のコメントのようになりました。そして、プロキシサーバー環境下での動作①に書いたエラーが出ます。 そして、ここでプログラムを停止し、seleniumが起動していたchromeで開発者ツールで見ると問題なくHTMLは表示されました。
otn

2021/12/07 14:32 編集

そういうことであれば、おそらく、こうでしょうね。 driver.get()は、Proxy認証が終わるまで返ってこないと思っていたのですが、 407 Proxy Authentication Required が返った段階で、driver.get()もリターンしてくるのでしょう。 この時点ではHTMLは空。 Proxy認証を入れる前に、プログラムはエラーで終了しているのでは? もしそうであれば、driver.get()の後に、input() とか入れて、Proxy認証を通してブラウザに画面が表示されてからEnterでinputの先に進めば良いかと思います。
chem_search

2021/12/07 22:48

ご指摘の通り、input()で対応したところ、問題なく動作しました! 問題解決までのプロセスを丁寧にサポートしてくださり、本当にありがとうございます。 とても勉強にもなりました。 要領を得ない返答で長引かせてしまいましたが、最後までお付き合い頂き、本当にありがとうございます。
otn

2021/12/08 03:34 編集

解決して良かったです。 > Proxy認証を入れる前に、プログラムはエラーで終了しているのでは? を早く言って欲しかった。認証される前に検索が動いたらエラーに決まっているので。 まあ、私の(返ってこないという)思い込みもあったわけですが。
chem_search

2021/12/08 10:58

ありがとうございます。 次回の質問時には、エラー前後の動作もできる限り詳細に書いて質問できるようにします!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問