使用 Selenium或JavaScript ,您如何获得(通过网络)已加载页面的传输大小(字节),包括所有内容,图片,css,js等等?
首选大小是通过网络传输的大小,即压缩的大小,仅用于发出的请求等。
这是您通常可以在开发工具中看到的,在网络状态栏的右侧:
如果那是不可能的,那么可以只获得所有已加载资源的总大小(没有压缩等)吗?这将是一个可以接受的替代方案。
浏览器 Firefox ,但是如果可以使用其他一些兼容的Selenium浏览器也可以接受。
我想这可以使用代理来完成,但有没有JS或Selenium方式来获取此类信息?
如果代理是唯一的方法,哪一个人可以使用(或实现)来保持这样的任务简单?在设置驱动程序之前用Java实现一些东西?
(该解决方案至少应该在Linux上运行,但最好也适用于Windows。我通过Java使用Selenium WebDriver。)
答案 0 :(得分:3)
为了将来参考,可以通过javascript从浏览器请求此信息。但是,在撰写本文时,尚未有任何浏览器支持此功能。 More information can be found here
与此同时,对于Chrome,您可以从效果日志中解析此信息。
lblTimer.Text = name;
然后您可以像这样获取此数据
//Enable performance logging
LoggingPreferences logPrefs = new LoggingPreferences();
logPrefs.enable(LogType.PERFORMANCE, Level.ALL);
capa.setCapability(CapabilityType.LOGGING_PREFS, logPrefs);
//Start driver
WebDriver driver = new ChromeDriver(capa);
如果您希望了解单个页面加载的具体内容,则可以使用预加载和后加载时间戳,并仅在该时间范围内获取条目。
答案 1 :(得分:2)
是的,你可以使用BrowserMobProxy来做到这一点。这是一个java jar,它使用selenium Proxy来跟踪来自客户端的网络流量。 喜欢页面加载持续时间,查询字符串到不同的服务等 你可以得到它bmp.lightbody.net。这个api将创建.har文件,它们将包含您可以使用的json格式的所有这些信息 在线工具http://www.softwareishard.com/har/viewer/
答案 2 :(得分:2)
我已经在Python中实现了这一目标,这可以节省一些时间。要设置日志记录:
logging_prefs = {'performance' : 'INFO'}
caps = DesiredCapabilities.CHROME.copy()
caps['loggingPrefs'] = logging_prefs
driver = webdriver.Chrome(desired_capabilities=caps)
要计算总数:
total_bytes = []
for entry in driver.get_log('performance'):
if "Network.dataReceived" in str(entry):
r = re.search(r'encodedDataLength\":(.*?),', str(entry))
total_bytes.append(int(r.group(1)))
mb = round((float(sum(total_bytes) / 1000) / 1000), 2)
答案 3 :(得分:2)
Hakello的答案中提到的性能API现已得到很好的支持(除IE和Safari之外的所有产品),并且易于使用:
return performance
.getEntriesByType("resource")
.map((x) => x.transferSize)
.reduce((a, b) => (a + b), 0);
您可以使用executeScript
运行该脚本,以获取自上次导航事件以来下载的字节数。无需设置或配置。