1

它是关于 WebDriver,特别是 HtmlUnitDriver 和 FirefoxWebDriver

我对 HtmlUnitDriver 和 FirefoxWebDriver 使用了相同的代理设置,但只有 FirefoxWebDriver 有效。

我使用 HtmlUnitDriver 得到的是来自代理服务器的“拒绝访问”。当我没有使用代理设置时,我得到了一个空白页。我不认为它与用户名或密码有任何关系,因为如果我没有设置用户名或密码,我会得到同样的错误。

以下是我的代码,任何想法将不胜感激。谢谢!

public WebDriver createHtmlUnitWebDriver() {
    HtmlUnitDriver htmlUnitDriver = new HtmlUnitDriver() {
        @Override
        protected WebClient modifyWebClient(WebClient client) {
            client.setProxyConfig(new ProxyConfig(PROXY_HOST, PROXY_PORT));

            DefaultCredentialsProvider credentialsProvider = new DefaultCredentialsProvider();
            credentialsProvider.addCredentials("username", "password");
            credentialsProvider.addProxyCredentials("username", "password", PROXY_HOST, PROXY_PORT);
            client.setCredentialsProvider(credentialsProvider);

            return client;
        }
    };

    htmlUnitDriver.setProxy(PROXY_HOST, PROXY_PORT);
    htmlUnitDriver.setJavascriptEnabled(true);

    return htmlUnitDriver;
}

public WebDriver createFirefoxWebDriver() {
    FirefoxProfile firefoxProfile = new FirefoxProfile();

    firefoxProfile.setPreference("network.proxy.type", 1);
    firefoxProfile.setPreference("network.proxy.http", PROXY_HOST);
    firefoxProfile.setPreference("network.proxy.http_port", PROXY_PORT);
    firefoxProfile.setPreference("network.proxy.ssl", PROXY_HOST);
    firefoxProfile.setPreference("network.proxy.ssl_port", PROXY_PORT);
    firefoxProfile.setPreference("network.proxy.no_proxies_on", "");

    return new FirefoxDriver(firefoxProfile);
}
4

1 回答 1

1

使用:

HtmlUnitDriver htmlUnitDriver = new HtmlUnitDriver();
htmlUnitDriver.get("http://www.google.com");

我可以看到代理详细信息被发送到底层 HttpClient (In HttpWebConnection.getResponse()) 方法。

您能否提供您的代理设置(如果它是公开的),或者您可以尝试直接使用 HttpClient,看看它是否与您的代理不兼容?

P.S.: it is better to use HtmlUnit user-list, as others may be interested to help as well.

于 2009-10-17T10:37:25.297 回答