【问题标题】:Log HTTP traffic with Webdriver and PhantomJS使用 Webdriver 和 PhantomJS 记录 HTTP 流量
【发布时间】:2014-03-21 13:54:45
【问题描述】:

如何使用 PhantomJS 通过 Webdriver 记录页面加载的所有 HTTP 请求和响应? 我正在使用 python,我的超级简单的测试脚本如下所示:

from selenium import webdriver

driver = webdriver.PhantomJS()
driver.get('http://www.golem.de')

我已经在 PhantomJS 中找到了这些功能:

page.onResourceRequested = function (request) {
    console.log('Request ' + JSON.stringify(request, undefined, 4));
};

但我不知道如何将它与 Selenium Webdriver 分别与 Ghostdriver 结合在一起。 我怎么能这样做?

【问题讨论】:

  • 我最近发现可以使用driver.get_log("har") 获取一些 HAR 格式的 HTTP 信息,但我对每种形式的重定向都很感兴趣,但并不是在每种情况下都报告了这些重定向。有什么建议吗?

标签: python selenium-webdriver phantomjs ghostdriver


【解决方案1】:

记录所有网络流量的一种方法是使用出色的工具strace,将所有网络请求(和数据)记录到文件中。

strace -s9999 -e trace=network curl http://example.com > /dev/null

部分输出:

sendto(3, "GET / HTTP/1.1\r\nUser-Agent: curl/7.32.0\r\nHost: example.com\r\nAccept: */*\r\n\r\n", 75, MSG_NOSIGNAL, NULL, 0) = 75
recvfrom(3, "HTTP/1.1 200 OK\r\nAccept-Ranges: bytes\r\nCache-Control: max-age=604800\r\nContent-Type: text/html\r\nDate: Sun, 08 Ju...

【讨论】:

  • 那个输出比我希望的要多一点......低级......但是谢谢,总比没有好。
  • 我知道这不是您问题的答案,但也许其他人会觉得它有用。如果您仅出于开发目的需要 HTTP 流量,那么您可以考虑临时使用 Firefox webdriver,以便检查所有内容。一旦一切正确,你就可以切换回 phantomjs
【解决方案2】:

另一种通用的低级方式,但比strace略高一点是tcpdump。您可以过滤到服务器应用程序的特定侦听端口范围和目标主机。如果需要,您还可以记录数据包以供以后分析。使用-A (ASCII) 转储选项,您可以过滤对给定页面的请求。向 localhost 请求 80 端口的简单示例:

tcpdump -i lo -A -nn dst port 80 and dst host `hostname`

我确信 Wireshark 或类似软件也可以执行此类特定于协议的过滤。

【讨论】:

    【解决方案3】:

    正如 Torben 所说,driver.get_log("har") 是一个解决方案,我认为这对我来说是一个最佳解决方案。

    from selenium import webdriver
    
    service_args = ['--ignore-ssl-errors=yes']
    driver = webdriver.PhantomJS(service_args=service_args)
    driver.get('https://www.google.com/')
    screenshot = driver.get_screenshot_as_png()
    imgname = "google.png"
    save_img = open(imgname, 'a')
    save_img.write(screenshot)
    save_img.close()
    print driver.get_log('har')
    driver.quit()
    

    其他解决方案,我们可以参考: 1.browsermob-proxy, 2.或者使用webdriver/firebug抓网(好像netexport不能被火狐验证,也许我们可以使用firebug本身,对于最新的firebug,它具有导出har的功能) 3.和2一样,这里有另一种解决方案:How to capture all requests made by page in webdriver? Is there any alternative to Browsermob?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-14
      • 1970-01-01
      • 2016-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多