【问题标题】:Is it possible to verify if a css selector is present on a remote page? [closed]是否可以验证远程页面上是否存在 CSS 选择器? [关闭]
【发布时间】:2018-02-20 00:12:24
【问题描述】:

我想用 C# 检查远程网页上的一些信息。

第一个问题,是否可以在不使用网络浏览器的情况下完全加载(使用 Javascript)网页,只使用 URL ?

第二个问题,是否可以仅使用 URL 来验证没有浏览器的远程页面上是否存在 css 选择器?

感谢您的收听!

【问题讨论】:

    标签: c# .net web css-selectors


    【解决方案1】:

    如果您的意思是“远程”而不是“遥远”,那么 - 是的,请客气。

    您的问题开始询问 C#,然后提到 javascript。 不知道为什么语言环境会发生变化 - 但我会尝试回答这两个问题。

    1. 您可以使用 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;

    页面会立即加载并显示返回的页面内容。

    1. 如果您想验证 CSS 选择器是否存在/是否对远程页面有效,那么您需要做的第一步是下载该远程页面的页面源。 我推荐使用 HtmlAgilityPack 及其扩展包 https://github.com/hcesar/HtmlAgilityPack.CssSelector

    一旦您安装了这些,您将能够实例化 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]");
    

    【讨论】:

    • 对于第一个问题,我提到 javascript 是因为我想加载一个执行 Javascript 的远程页面,因为一些 JS 脚本会更改 HTML DOM。但我想用 C# 来实现这个
    • 您将需要一个浏览器控件,以便执行 javascript。 Javascript 是客户端代码 - 所以它需要一个浏览器客户端来执行。这并不一定意味着您需要一个可见浏览器,您可以从 C# 实例化一个 WebBrowser 控件并让它加载您希望获取其动态内容的 URL。您需要给浏览器控制足够的时间来执行 javascript 并使其能够运行 javascript 代码。我预见到的唯一问题是浏览器控件将无法访问 cookie 或身份验证细节。
    • 谢谢你,这对我很有帮助!
    猜你喜欢
    • 1970-01-01
    • 2011-12-30
    • 1970-01-01
    • 2021-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-09
    相关资源
    最近更新 更多