【发布时间】:2018-02-20 00:12:24
【问题描述】:
我想用 C# 检查远程网页上的一些信息。
第一个问题,是否可以在不使用网络浏览器的情况下完全加载(使用 Javascript)网页,只使用 URL ?
第二个问题,是否可以仅使用 URL 来验证没有浏览器的远程页面上是否存在 css 选择器?
感谢您的收听!
【问题讨论】:
标签: c# .net web css-selectors
我想用 C# 检查远程网页上的一些信息。
第一个问题,是否可以在不使用网络浏览器的情况下完全加载(使用 Javascript)网页,只使用 URL ?
第二个问题,是否可以仅使用 URL 来验证没有浏览器的远程页面上是否存在 css 选择器?
感谢您的收听!
【问题讨论】:
标签: c# .net web css-selectors
如果您的意思是“远程”而不是“遥远”,那么 - 是的,请客气。
您的问题开始询问 C#,然后提到 javascript。 不知道为什么语言环境会发生变化 - 但我会尝试回答这两个问题。
您可以使用 Javascript 加载页面吗?
是的:您需要做的是对 URL 执行 GET 请求。 在这个阶段你使用 Javascript 所做的有趣的事情是,你在 Web 浏览器上下文中所做的任何 GET 请求都可以访问在该浏览会话中设置的 cookie 和身份验证——这对测试自动化特别有用.例如:您需要下载 PDF,但 PDF 受身份验证检查保护。
xmlhttp=new XMLHttpRequest();
xmlhttp.open("GET", "http://www.google.com", false);
xmlhttp.send();
var data = JSON.parse(xmlhttp.responseText);
这将返回您请求的 URL 的 html 内容,如果是二进制文件,则返回二进制内容。 如果是 html 内容,则可以使用 javascript 将当前页面源更改为与您刚刚请求的页面源相同。
例如:
document.documentElement.innerHTML = myReturnedData;
页面会立即加载并显示返回的页面内容。
一旦您安装了这些,您将能够实例化 HtmlDocument,然后使用您指定的定位器查询文档。
var doc = new HtmlAgilityPack.HtmlDocument();
doc.Load("test.html");
IList<HtmlNode> nodes = doc.QuerySelectorAll("div .my-class[data-attr=123] > ul li");
HtmlNode node = nodes.QuerySelector("p.with-this-class span[data-myattr]");
【讨论】: