2015-05-13 3 views
0

Я использую прокси-сервер Browsermob с web-рефером селена для захвата журнала HAR. Я могу генерировать журналы, но страницыTimings не захватываются. Остальное все данные захватываются. Любая идея, что здесь не так?pageTimings не попадают в прокси-сервер Selenium и Browsermob

Нужно ли мне использовать некоторые ждать, используя этот вызов:

PUT/прокси/[порт]/ожидание - ждать, пока все запросы клиентов из

enter image description here обновления после выполнения короткий ответ:

  1. Получил последний снимок от git, его построил.
  2. Запуск прокси-сервера из модуля распространения - «Главная».
  3. Бревна получения захватило
  4. После каждого изменения исходной страницы, я делаю вызов, чтобы заставить прокси конец страницы с помощью Puting к/прокси/{порт}/харам/PAGEREF
  5. Журналы получили генерироваться со ссылками страниц но все же страницыTimings не заполняются.

Обновленный скриншот:

enter image description here

Ошибка в журнале после использования небольшой прокси-сервер:

[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] 
+0

Сообщение об ошибке в журнале говорится, что удаленный хост закрыл соединение. Вы видите эту ошибку, когда не используете BMP? –

ответ

0

Короткий ответ: Если вы используете 2.1.0-бета-1 или выше (см. github page), вы можете заставить прокси-сервер завершить работу страницы с помощью PUTing to/proxy/{port}/har/pageRef. Это заполнит объект pageTimings в HAR. (Это будет также начать новую страницу.)

Update: Раздел «Создатель» в 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":"" 
    } 
    ], 

Длинный ответ: в отличие от веб-браузера, BrowserMob прокси на самом деле не знает, что такое «страница» есть. Он видит только отдельные запросы и ответы, поэтому вам нужно явно указывать BMP, когда страница начинается и заканчивается. Java interface предоставляет метод newPage(), а REST API предоставляет конечную точку /proxy/{port}/har/pageRef. Однако, поскольку BMP является просто прокси-сервером, запросы могут поступать из нескольких браузеров/клиентов для нескольких страниц одновременно, а BMP не имеет никакого способа узнать, какой запрос принадлежит какой странице. В зависимости от вашего варианта использования информация о синхронизации страниц может не иметь смысла.

+0

Спасибо за ответ jekh!- Я последовал за этими шагами, думаю, мне нужна дополнительная помощь. Пожалуйста, ознакомьтесь с приведенными выше обновлениями. – Amrit

+0

Я обновил ответ с дополнительной информацией о работе с LittleProxy из командной строки и примером заполненного элемента HAR pageTimings. –

+0

Я получаю pagetimings после использования littleproxy из командной строки. Я также получаю ошибку в журнале, который я обновил выше. – Amrit

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();