12

現在、これは私のコードですが、webDriver はプロキシ資格情報を入力するためのポップアップを表示しており、この厄介な状況は望んでいません。スタックオーバーフローに同じ質問が表示されたのはこれが初めてではありませんが、誰も適切な回答を返しませんでした.

この問題の解決策を見つけるためにグーグルを試しました。Javaで解決策を知るようになりましたが、Pythonでそれを行う方法がわかりません。

    PROXY_HOST = "65.49.1.59"
    PROXY_PORT = 60099
    fp = webdriver.FirefoxProfile()
    # Direct = 0, Manual = 1, PAC = 2, AUTODETECT = 4, SYSTEM = 5

    print " im in parse_details"

    fp.set_preference("network.proxy.type", 1)
    fp.set_preference('network.http.phishy-userpass-length', 255)

    fp.set_preference("network.proxy.http", PROXY_HOST)
    fp.set_preference("network.proxy.http_port", PROXY_PORT)
    fp.set_preference("network.proxy.ftp", PROXY_HOST)
    fp.set_preference("network.proxy.ftp_port", PROXY_PORT)
    fp.set_preference("network.proxy.ssl", PROXY_HOST)
    fp.set_preference("network.proxy.ssl_port", PROXY_PORT)
    #fp.set_preference("network.proxy.user_name", 'someusername')
    #fp.set_preference("network.proxy.password", 'somepassword')
    fp.set_preference("network.proxy.no_proxies_on", "") # set this value as desired

    self.driver = webdriver.Firefox(firefox_profile=fp)
    self.driver.get("http://www.whatismyip.com/")

これらの以下のステートメントは私が推測したものであり、それらの構文が正しいかどうかはわかりません。セレンのドキュメントで調べようとしても、助けにはなりません。これに光を当ててくれませんか。

    #fp.set_preference("network.proxy.user_name", 'someusername')
    #fp.set_preference("network.proxy.password", 'somepassword')

psここで同じ質問が尋ねられましたPythonを使用したSelenium:firefoxのhttpプロキシパスワードを入力/提供します

4

3 に答える 3

12

Selenium は基本認証では処理できず、ポップアップでもうまく機能しません。しかし、この問題は解決可能です。私にとってうまくいった解決策として(私はここで見つけました)、Seleniumの認証を行うブラウザ拡張機能を追加することです。とても簡単です。Chrome と Python での動作は次のとおりです。

  1. 次の2 つのファイルを含むzip ファイルproxy.zipを作成します。

background.js

var config = {
    mode: "fixed_servers",
    rules: {
      singleProxy: {
        scheme: "http",
        host: "YOU_PROXY_ADDRESS",
        port: parseInt(YOUR_PROXY_PORT)
      },
      bypassList: ["foobar.com"]
    }
  };

chrome.proxy.settings.set({value: config, scope: "regular"}, function() {});

function callbackFn(details) {
    return {
        authCredentials: {
            username: "YOUR_PROXY_USERNAME",
            password: "YOUR_PROXY_PASSWORD"
        }
    };
}

chrome.webRequest.onAuthRequired.addListener(
        callbackFn,
        {urls: ["<all_urls>"]},
        ['blocking']
);

YOUR_PROXY_*を設定に置き換えることを忘れないでください。

マニフェスト.json

{
    "version": "1.0.0",
    "manifest_version": 2,
    "name": "Chrome Proxy",
    "permissions": [
        "proxy",
        "tabs",
        "unlimitedStorage",
        "storage",
        "<all_urls>",
        "webRequest",
        "webRequestBlocking"
    ],
    "background": {
        "scripts": ["background.js"]
    },
    "minimum_chrome_version":"22.0.0"
}
  1. 作成したproxy.zipを拡張子として追加

Python コード:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_extension("proxy.zip")

driver = webdriver.Chrome(executable_path='chromedriver.exe', chrome_options=chrome_options)
driver.get("http://google.com")
driver.close()

それでおしまい。私にとって、それは魅力のように機能しました。proxy.zip を動的に作成する必要がある場合、または PHP の例が必要な場合は、元の投稿に移動してください

于 2016-02-09T13:25:56.793 に答える