【发布时间】:2020-09-22 21:02:41
【问题描述】:
我正在尝试在 Chrome 中加载原始 XML url,并使用 XPath 搜索生成的 XML。 (这是 Selenium 作为测试的一部分。)
我很确定这在以前有效,但目前,当我将浏览器定向到 XML URL 时,它不是转储 XML 原始文件,而是将其包装在一些 HTML 中。
如果我在 Chrome 中加载 URL,它会显示得很好,是原始文本。如果我在“预览”或“响应”选项卡中查看“网络”,我会看到有效负载中仅发送了原始 XML。
我的期望是:
<Foo xmlns="some.site.com">
<Bar>123456</Bar><Thingy>1</Thingy><Widget>4420.00</Widget><Hooby>29.00</Hooby>
</Foo>
但是,当我打开 Inspector 时,我得到:
<html>
<head/>
<body>
<pre style="word-wrap: break-word; white-space: pre-wrap;">
<Foo xmlns="some.site.com">
<Bar>123456</Bar><Thingy>1</Thingy><Widget>4420.00</Widget><Hooby>29.00</Hooby>
</Foo></pre>
</body>
</html>
因此,当我尝试从 XML 中检索一个值(在本例中假设为 <Bar> 的内容),并且我使用 By.xpath("//Bar") 的定位器时,它会抛出 No such Element。
编辑:我通过迭代匹配“//*”的元素验证了这也是 Selenium 所看到的。
for (WebElement e : driver.findElements(By.xpath("//*"))) {
System.out.println(e.getTagName());
}
输出:
html
head
body
pre
如何让 Chrome 仅将 XML 呈现为 XML 而不是将其包装在 HTML 中?
我真的很确定这以前有效。
【问题讨论】:
-
请注意,这里的 xml 是希腊化的,而 xmlns 的 url 是捏造的 b/c 所以即使是假 url,我也不会让我发帖。所以这些不是这里的相关问题。
-
我的建议是使用 selenium 获取页面源并自己解析或使用 xml 解析库。我知道 python 有
driver.page_source,不确定您使用的是哪种语言。似乎比尝试将插件加载到自动 chromedriver 会话中更简单。 -
我担心 selenium 的 get-source 函数会返回 Chrome 修改后的 HTML,如 Inspector 中所示。我最终确实最终直接从 JAVA 访问了 url,然后进行了 XML 解析。好像没必要……
-
但是,我仍然可以看到我不希望 Chrome 将原始数据隐式包装在 HTML 中的场景。
标签: xml selenium google-chrome xpath render