自动化“保存HAR包含内容”

7

我熟悉如何使用Google Chrome Web Inspector手动保存包含内容的网页为HAR文件。现在我想自动化这个过程。

在寻找自动化生成HAR文件的工具时,我发现了一些解决方案,但是它们都没有保存资源的内容。

我已经尝试了以下方法,但没有成功:

获取您请求的页面内容(原始HTML)是可行的,但获取加载的每个其他网络资源的内容(CSS、Javascript、图像等)是我的问题所在。

你找到了一种方法来做这件事了吗? - Monodeep
@Monodeep 我从未找到解决方案。 - Teddy
谢谢回复。我找到了一个解决方案,现在已经成功地使用它了。它使用了Selenium、Firebug和NetExport(Firefox扩展)。如果你还需要的话,我可以在这里发布代码(我用Python编写)。 - Monodeep
FYI chrome-har-capturer 可以通过 --content 选项实现该功能。 - cYrus
3个回答

6
我认为自动化生成HAR文件最可靠的方法是使用BrowsermobProxy,结合chromedriver和Selenium。
以下是一个用Python编写的脚本,可以编程生成HAR文件,并将其集成到您的开发周期中。它还捕获内容。
from browsermobproxy import Server
from selenium import webdriver
import os
import json
import urlparse

server = Server("path/to/browsermob-proxy")
server.start()
proxy = server.create_proxy()

chromedriver = "path/to/chromedriver"
os.environ["webdriver.chrome.driver"] = chromedriver
url = urlparse.urlparse (proxy.proxy).path
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--proxy-server={0}".format(url))
driver = webdriver.Chrome(chromedriver,chrome_options =chrome_options)
proxy.new_har("http://stackoverflow.com", options={'captureHeaders': True,'captureContent':True})
driver.get("http://stackoverflow.com")    
result = json.dumps(proxy.har, ensure_ascii=False)
print result
proxy.stop()    
driver.quit()

您还可以使用这个工具,它可以从Chrome和Firefox无头模式下生成HAR和NavigationTiming数据:Speedprofile


谢谢!我还没有测试过,但它看起来很有前途。 - Teddy
1
我观察到使用代理会导致比平常更长的时间。有没有方法可以绕过代理获取正确的计时HAR,就像不使用代理一样? - vishalg
1
以上方法似乎无法在无头浏览器中使用。因此,如果我提供chrome_options.add_argument(“--headless”),生成的JSON将不包含所有HTTP请求。 - Punit S

3

抱歉,我没有注意到netsniff.js是phantomjs的一个扩展。 - Pete

1
你可以使用http代理来保存内容。在Windows上,你可以使用免费的 fiddler。在Mac和Linux上,你可以使用Charles Proxy,但它不是免费的。
这是Fiddler的屏幕截图,你可以选择保存所有请求的详细信息,包括头部信息。

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接