web-dev-qa-db-ja.com

Selenium chromedriverで認証済みプロキシを使用するにはどうすればよいですか?

何時間も探した結果、これは不可能だと思い始めています。

Chrome=実行ごとに異なる認証済み(パブリックではない)プロキシを使用してSeleniumを介して実行する必要があります。

PROXY_IP = "<some IP address>"
UID = "<the user id>"
PWD = "<the password">

options = webdriver.ChromeOptions()
options.add_argument("--proxy-server=%s:%s@%s" % (UID,PWD,PROXY_IP))

driver = webdriver.Chrome(executable_path=".\\driver\\chromedriver.exe",
                          chrome_options=options)
driver.get("<site URL>")

Chromeが起動してエラーが表示されます。

This webpage is not available
ERR_NO_SUPPORTED_PROXIES

このような認証を必要としないパブリックプロキシを使用する場合...

PROXY_IP = "<public proxy IP address>"

options = webdriver.ChromeOptions()
options.add_argument("--proxy-server=%s" % PROXY_IP)

driver = webdriver.Chrome(executable_path=".\\driver\\chromedriver.exe",
                          chrome_options=options)
driver.get("<site URL>")

...正常に実行され、プロキシを使用しているときにサイトが表示されます。

http://ユーザーIDの前:

options.add_argument("--proxy-server=http://%s:%s@%s" % (UID,PWD,PROXY_IP))

私が広範囲にわたって調査し、解決策を見つけていないという事実は、何も存在しないかもしれないと私を信じさせます。

私はこれを見つけましたが、それを理解することはできません。

Selenium chromedriver認証プロキシ

わからないbrowswermob-proxyは、Pythonで実装またはテストする方法です。絶対に必要な場合を除いて、バンドエイドソリューションを積み上げるのは嫌いです。

21
martin's

python Seleniumでauthを使用してプロキシを使用するには、 seleniumwire を使用できます。

まず、_pip install Selenium-wire_でインストールします

次に、SeleniumではなくSeleniumwireからWebドライバーをインポートします。

_from seleniumwire import webdriver
options = {
    'proxy': {
        'http': 'http://username:password@Host:port', 
        'https': 'https://username:password@Host:port',
        'no_proxy': 'localhost,127.0.0.1' # excludes
    }
}
browser = webdriver.Chrome(path_to_driver, seleniumwire_options=options)
_

これで、ブラウザインスタンスをSeleniumとまったく同じ方法で使用できます:browser.get('https://api.ipify.org')など...

5
Blackster

私はWeb上のほとんどのソリューションをチェックしましたが、どれもchrome/firefoxによる認証が機能していないことを確認しました。このリンクを確認してください: https://github.com/webdriverio/webdriverio/issues/324 。最後の一時的な解決策は、プロキシプロバイダーでIPアドレスをホワイトリストに登録することです。

4
Anurag Narra

実際には正しく機能しない多くのソリューションを試した後、私は最終的に、以前の回答から提案された拡張機能を使用して認証済みプロキシを設定することができました。あなたがする必要があるのはこのリンクを入力することです:

http://crxextractor.com/ とこのURLを貼り付けます: https://www.crx4chrome.com/crx/1446/

インストールせずに、拡張子を.crxファイルとしてダウンロードできます。私がこのコードを使用したよりも:

proxy = {'address': 'pr.oxylabs.io:7777',
     'username': 'USERNAME',
     'password': 'PASSWORD'}

capabilities = dict(DesiredCapabilities.CHROME)
capabilities['proxy'] = {'proxyType': 'MANUAL',
                         'httpProxy': proxy['address'],
                         'ftpProxy': proxy['address'],
                         'sslProxy': proxy['address'],
                         'noProxy': '',
                         'class': "org.openqa.Selenium.Proxy",
                         'autodetect': False,
                         'socksUsername': proxy['username'],
                         'socksPassword': proxy['password']}

options = webdriver.ChromeOptions()
options.add_extension("./extension_2_0_0_0.crx")
driver = webdriver.Chrome(executable_path=CHROME_PATH, desired_capabilities=capabilities, chrome_options=options)
2
OMERINB

クロムの解決策は見つかりませんでした。 headlessオプションを使用して拡張子を追加することはできません。 Herokuを chrome-buildpack で使用しています。以下のオプションがあります

  1. ヘッドレスオプションの代わりにxvfbを使用して拡張機能をインストールする
  2. 認証されたプロキシにトラフィックを転送するローカルプロキシフォワーダーを使用します。 Squid 、mitProxy、または proxy-login-automator のようなものを使用できます

これらの回避策の代わりに、プロキシ認証ポップアップでユーザー名とパスワードを入力できるFirefoxに切り替えました。以下のように。次のコードはRuby Capybaraを使用するためのものです。プラットフォームでこのようなことができるはずです。


page.driver.browser.switch_to.alert.send_keys('proxy-username' + Selenium::WebDriver::Keys::KEYS[:tab] + 'my-password')
page.driver.browser.switch_to.alert.accept
1
GS Shahid

私は同じことをするために多くの時間を試みました。

Chromeは、インストールされているOSのプロキシのみを使用しています。オプション->検索:プロキシ->プロキシ設定の変更で確認できます

したがって、追加のアドオンとこのアドオンを構成しないと、これを行うことはできません。

または、OSプロキシ設定を変更することもできます-これははるかに簡単です。

また、phantomjsを使用することもできます-chromeと同じエンジン(WebKit)を持っています。このようなものを使用して:

String PROXY = proxyIP + ":" + proxyPort;
String proxyAuth= proxyUser + ":" + proxyPass;
        OpenQA.Selenium.Proxy proxy = new OpenQA.Selenium.Proxy();
                    proxy.HttpProxy = PROXY;
                    proxy.FtpProxy = PROXY;
                    proxy.SslProxy = PROXY;
                    proxy.SocksProxy = PROXY;

    var serviceJS = PhantomJSDriverService.CreateDefaultService(phantomPath);
    serviceJS.AddArguments("--proxy=" + PROXY, "--proxy-type=http", "--proxy-auth=" + proxyAuth);
0
Andrew

これは一時的な解決策であり、初期状態で機能する可能性があります。コードはPythonです。まずプラグインをchrome plugin store:Proxy-Auto-Auth_v2.0.crxからダウンロードします。

        options = webdriver.ChromeOptions()
        options.add_extension("./Proxy-Auto-Auth_v2.0.crx")) #this will provide you a window to enter user name and proxy 
        driver = webdriver.Remote(command_executor=Selenium_server,desired_capabilities=options.to_capabilities())

        or 

        driver = webdriver.Chrome(chrome_options=options)
0
Manoj Sahu

これ は私が見つけた最良の解決策であり、機能した唯一の解決策です-この質問の他のすべての回答は古くなっています。基本的に、Chromeのオンザフライでauth拡張機能を生成します。次のように、スクリプトで定義されている関数を使用するだけです。

driver = proxy_chrome(Host, port, username, password)
driver.get("http://www.icanhazip.com/")
driver.get("https://www.reddit.com/")
print('Terminated without issues.')

これは--headlessオプションでは機能しないことに注意してください。ただし、Linuxでは、x仮想フレームバッファーを使用して、それをシミュレートできます。 pythonではこれと同じくらい簡単です。

import xvfbwrapper
x = xvfbwrapper.Xvfb()
x.start()
0
Muppet