2

BrowserMob をセレン テストに統合しようとしています。http で動作する Web サイトでは正常に動作しますが、https Web サイトではブラウザーが動作を停止し、HAR ファイルに要求が含まれません。

https サイトに移動すると、ブラウザでこのエラーが発生します。

「プロキシ サーバーに問題があるか、アドレスが正しくありません。」

これが私のコードです。

    public class Browsermob {

  BrowserMobProxy proxy = new BrowserMobProxyServer();

  @Test
  public void browsermobtest() {


    proxy.start(9091);

    // get the Selenium proxy object
    Proxy seleniumProxy = ClientUtil.createSeleniumProxy(proxy);


    // configure it as a desired capability
    DesiredCapabilities capabilities = new DesiredCapabilities();
    capabilities.setCapability(CapabilityType.PROXY, seleniumProxy);
    System.setProperty("webdriver.chrome.driver", "C:/Users/Madis/Documents/chromedriver.exe");

    WebDriver driver = new ChromeDriver(capabilities);

    // enable more detailed HAR capture, if desired (see CaptureType for the complete list)
    proxy.enableHarCaptureTypes(CaptureType.REQUEST_CONTENT, CaptureType.RESPONSE_CONTENT);

    // create a new HAR with the label "google.com"
    proxy.newHar("http://www.google.com/");

    // open google.com
    driver.get("https://www.google.ee/#gfe_rd=cr");
    driver.findElement(By.cssSelector("#gb_70")).click();



  }

  @AfterMethod
  public void Afterthetest() {

    // get the HAR data
    Har har = proxy.getHar();

    File harFile = new File("C:/Users/Madis/Documents/har.har");
    try {
      har.writeTo(harFile);
    } catch (IOException e) {
      e.printStackTrace();
    }

  }
}
4

5 に答える 5

3

Selenium Proxy オブジェクトで sslProxy を指定する必要はありません。ClientUtil.createSeleniumProxyがこれを行い、ほとんどの単純なケースでは、適切なデフォルト値を選択します (InetAddress.getLocalHost() を使用します。HTTP で機能する場合は、HTTPS でも機能します)。

次の点に注意してください。

  1. ブラウザーに証明書エラーを無視するように指示する (Chrome では --ignore-certificate-errors コマンドライン フラグを使用する) か、ブラウザーのトラスト ストアにBMP CAをインストールしない限り、ブラウザーに SSL 警告が表示されます。 Windows 上の Chrome では、Windows トラスト ストアにインストールする必要があります)。
  2. Chrome と OS のバージョンによっては、コマンド ライン オプションを使用して別の user-data-dir を指定する必要がある場合があります。たとえば、--user-data-dir=/tmp/insecurechrome.
  3. BMP には独自の信頼できる証明書のソース (Java トラスト ストア + Mozilla からの最近のリスト) があるため、プライベート CA によって発行された証明書を使用して内部 Web サイトに接続しようとしている場合は、BMP にプライベート CA を信頼するように指示する必要があります。または、.setTrustAllServers(true) を使用して証明書の検証をスキップします。
  4. createSeleniumProxy() を呼び出す前に、.start(...) を使用してプロキシを開始する必要があります。

これらすべてを組み合わせると、コードは次のようになります。

BrowserMobProxy proxy = new BrowserMobProxyServer();
proxy.setTrustAllServers(true);
proxy.start(9091);

// get the Selenium proxy object
Proxy seleniumProxy = ClientUtil.createSeleniumProxy(proxy);
// NOTE: there is no call to .setSslProxy() here

// configure it as a desired capability
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(CapabilityType.PROXY, seleniumProxy);
System.setProperty("webdriver.chrome.driver", "C:/Users/Madis/Documents/chromedriver.exe");

ChromeOptions options = new ChromeOptions();
options.addArgument("--ignore-certificate-errors");
// replace 'somedirectory' with a suitable temp dir on your filesystem
options.addArgument("--user-data-dir=somedirectory");
capabilities.setCapability(ChromeOptions.CAPABILITY, options);

WebDriver driver = new ChromeDriver(capabilities);

// [...]
于 2016-09-08T22:48:19.200 に答える
0

私はそれを機能させることができました。log4j を追加して browsermob ログをデバッグした後、問題の原因は

Caught an exception on ClientToProxyConnection
 java.lang.NoSuchMethodError: com.google.common.net.HostAndPort.fromHost(Ljava/lang/String;)Lcom/google/common/net/HostAndPort;

それを機能させるために、maven プロジェクトに依存関係を追加する必要がありました。これにより、この問題が修正され、https サイトだけでなく http サイトでもトラフィックがキャプチャされていることがわかりました。

<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>20.0</version>
</dependency>
于 2017-01-04T12:44:08.213 に答える
0

ブラウザの Mob プロキシ オブジェクトと Selenium プロキシ オブジェクトを混同しています。

プロキシ変数proxyは、ブラウザが接続する実際のプロキシです。

変数seleniumProxyは、ブラウザのプロキシ設定を表すオブジェクトです。

プロキシ サーバーのアドレスとして「trustAllSSLCertificates」を使用するようブラウザに指示しているため、エラーが発生しています。代わりに、browsermob( proxy) に を伝えるtrustAllSSLCertificates必要があり、sslProxy は browsermob プロキシを参照する必要があります。

次のようにプロキシを開始します。

public void startProxy() {
      proxy = new BrowserMobProxyServer();
      proxy.setTrustAllServers(true);
      proxy.start(9091);
}

次のようにドライバーを起動します。

public void startBrowserWithProxy() {
        Proxy seleniumProxy = ClientUtil.createSeleniumProxy(proxy);
        seleniumProxy.setSslProxy("localhost:" + proxy.getPort());
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability(CapabilityType.PROXY, seleniumProxy);
        System.setProperty("webdriver.chrome.driver", "C:/Users/Madis/Documents/chromedriver.exe");
        WebDriver driver = new ChromeDriver(capabilities);
}
于 2016-09-06T14:24:59.940 に答える