1

Selenium Webdriver で Browsermob プロキシを使用して、HAR ログをキャプチャしています。ログを生成できますが、pageTimings がキャプチャされません。残りのすべてのデータがキャプチャされます。ここで何が間違っているのですか?

この呼び出しを使用して待機する必要がありますか:

PUT /proxy/[port]/wait - すべてのリクエストが行われるまで待ちます

ここに画像の説明を入力 短い答えに従った後の更新:

  1. git から最新のスナップショットを取得し、ビルドしました。
  2. 配布モジュール - 「メイン」プログラムからプロキシを開始しました。
  3. キャプチャされるログ
  4. 各ページ ソースが変更された後、/proxy/{port}/har/pageRef に PUT することにより、プロキシに強制的にページを終了させる呼び出しを行っています。
  5. ログはページ参照で生成されましたが、まだ pageTimings は入力されていません。

更新されたスクリーンショット:

ここに画像の説明を入力

小さなプロキシを使用した後のログのエラー:

[ERROR 2015-05-18T10:29:00,288 org.littleshoot.proxy.impl.ClientToProxyConnection] (LittleProxy-ClientToProxyWorker-1) (AWAITING_INITIAL) [id: 0x1961ff09, /0:0:0:0:0:0:0:1:63598 => /0:0:0:0:0:0:0:1:8445]: Caught an exception on ClientToProxyConnection java.io.IOException: An existing connection was forcibly closed by the remote host
    at sun.nio.ch.SocketDispatcher.read0(Native Method) ~[?:1.8.0_45]
    at sun.nio.ch.SocketDispatcher.read(Unknown Source) ~[?:1.8.0_45]
    at sun.nio.ch.IOUtil.readIntoNativeBuffer(Unknown Source) ~[?:1.8.0_45]
    at sun.nio.ch.IOUtil.read(Unknown Source) ~[?:1.8.0_45]
    at sun.nio.ch.SocketChannelImpl.read(Unknown Source) ~[?:1.8.0_45]
    at io.netty.buffer.UnpooledUnsafeDirectByteBuf.setBytes(UnpooledUnsafeDirectByteBuf.java:447) ~[netty-all-4.0.27.Final.jar:4.0.27.Final]
    at io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:881) ~[netty-all-4.0.27.Final.jar:4.0.27.Final]
    at io.netty.buffer.WrappedByteBuf.writeBytes(WrappedByteBuf.java:641) ~[netty-all-4.0.27.Final.jar:4.0.27.Final]
    at io.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:241) ~[netty-all-4.0.27.Final.jar:4.0.27.Final]
    at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:119) [netty-all-4.0.27.Final.jar:4.0.27.Final]
    at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:511) [netty-all-4.0.27.Final.jar:4.0.27.Final]
    at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:468) [netty-all-4.0.27.Final.jar:4.0.27.Final]
    at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:382) [netty-all-4.0.27.Final.jar:4.0.27.Final]
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:354) [netty-all-4.0.27.Final.jar:4.0.27.Final]
    at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:111) [netty-all-4.0.27.Final.jar:4.0.27.Final]
    at java.lang.Thread.run(Unknown Source) [?:1.8.0_45]
4

2 に答える 2

1

簡単な回答: 2.1.0-beta-1 以降 ( github ページを参照) を使用している場合は、 /proxy/{port}/har/pageRef に PUT することで、プロキシに強制的にページを終了させることができます。これにより、HAR に pageTimings オブジェクトが入力されます。(また、新しいページが開始されます。)

更新: HAR の「作成者」セクションは、littleproxy モジュールが使用されていることを示す必要があります。

"log":{
   "version":"1.2",
   "creator":{
      "name":"BrowserMob Proxy",
      "version":"2.1.0-beta-1-littleproxy",
      "comment":""
   },

最初のページを終了した後の pageTimings セクションの例を次に示します。

  "pages":[
     {
        "id":"Page 0",
        "startedDateTime":"2015-05-16T12:37:48.406-07:00",
        "title":"Page 0",
        "pageTimings":{
           "onLoad":89648,
           "comment":""
        },
        "comment":""
     },
     {
        "id":"Page 1",
        "startedDateTime":"2015-05-16T12:39:18.054-07:00",
        "title":"Page 1",
        "pageTimings":{
           "comment":""
        },
        "comment":""
     }
  ],

長い答え: Web ブラウザーとは異なり、BrowserMob Proxy は実際には「ページ」が何であるかを認識していません。個々の要求と応答のみが表示されるため、ページの開始時と終了時に明示的に BMP に通知する必要があります。Java インターフェイスはメソッドを提供しnewPage()、REST API は/proxy/{port}/har/pageRefエンドポイントを提供します。ただし、BMP は単なるプロキシであるため、リクエストは複数のブラウザー/クライアントから同時に複数のページに送信される可能性があり、BMP にはどのリクエストがどのページに属しているかを知る方法がありません。ユースケースによっては、ページのタイミング情報が意味をなさない場合があります。

于 2015-05-14T18:05:20.647 に答える
0

わたしにはできる:

BrowserMobProxy proxy = new BrowserMobProxyServer();
proxy.start(0);
HashSet<CaptureType> enable = new HashSet<CaptureType>();
enable.add(CaptureType.REQUEST_HEADERS);
enable.add(CaptureType.REQUEST_CONTENT);
enable.add(CaptureType.RESPONSE_HEADERS);
proxy.enableHarCaptureTypes(enable);
HashSet<CaptureType> disable = new HashSet<CaptureType>();
disable.add(CaptureType.REQUEST_COOKIES);
disable.add(CaptureType.RESPONSE_COOKIES);
proxy.disableHarCaptureTypes(disable);

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

capabilities = new DesiredCapabilities();
capabilities.setCapability(CapabilityType.PROXY, selProxy);
capabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS,true);

WebDriver driver = new FirefoxDriver(new FirefoxBinary(),profile,capabilities);


driver.get(url);

Har har = proxy.getHar();
于 2015-08-18T14:17:04.283 に答える