HtmlAgilityPack - 文本框中没有显示任何内容

时间:2017-12-08 14:02:27

标签: c# xpath visual-studio-2017 richtextbox html-agility-pack

我有一个带有文本框的Windows窗体,代码是假设使用我通过chromes开发人员工具获得的xpath从网站提取信息并将其显示在所述文本框中。

问题是当我运行程序时,文本框中没有显示任何内容。我不确定用于获取信息的代码是错误的还是我的代码显示所述信息是错误的。请注意,此代码使用HtmlAgilityPack。

以下是相关代码:

private void richTextBox1_TextChanged(object sender, EventArgs e)
    {
        string Url = "https://apps.ko.com/aami/iguest/default.asp";
        HtmlWeb web = new HtmlWeb();
        HtmlAgilityPack.HtmlDocument doc = web.Load(Url);

        string username = doc.DocumentNode.SelectNodes("/html/body/center/div/table/tr[1]/td[2]/strong")[0].InnerText;
        string password = doc.DocumentNode.SelectNodes("/html/body/center/div/table/tr[2]/td[2]/strong")[0].InnerText;
        string summary = doc.DocumentNode.SelectNodes("/html/body/center/div/table/tr[4]")[0].InnerText;


        richTextBox1.Text = "User Name: " + username + " | Password: " + password + " | Summary: " + summary;

    }

在Intranet页面上列出了用户名和密码,我试图从网页上提取它并将其显示在文本框中,只要此应用程序在域计算机上运行,​​它应该能够访问该页面并显示所需信息。我不是要尝试登录任何内容,只是从网页上提取一些文字。

你们都不能看到这个页面,因为你们不在它只能从中访问的域名。

出于安全原因,以下是代码中包含网址的HTML页面。

<body>
<div style="background-image:url(intranet.com/images/headergraphic_repeat_tile.jpg); background-repeat:repeat-x; margin-top:0px; margin-left:0px; width:100%; height:118px; padding:0px;">
<img src="https://intranet.com/iguest/images/headergraphic_extended.jpg" align="right">
</div>
<center>
<div style="width:390px; padding:20px; ">
    <h2 align="center">Guest Wireless Access</h2>
    <p align="left">Guests may access the wireless service by using the log-in <br>credentials below. <br>
      <br>
    </p>
  <table width="360" align="left" cellpadding="4" cellspacing="0">
    <tbody><tr>
      <td width="63">User ID:</td>
      <td><strong>KOGUEST</strong></td>
    </tr>
    <tr>
      <td>Password:</td>
      <td><strong><span id="iguestpw">P@ssword</span></strong> <font size="-2">&nbsp;&nbsp;(Password is case-sensitive.)</font></td>
    </tr>
    <tr>
    	<td colspan="2" align="center"><font size="-2">  The password is updated once a week on<br> Saturday at midnight EST.<br></font></td>
    </tr>
    <tr>
    	<td colspan="2"><br><br><p align="left"><a href="https://partner.intranet.com/sites/kooffice/training/documentation/guest wireless access_instructions for connecting.doc" target="_blank">Print  instructions</a> for your guest.<!--  or <a href="https://partner.intranet.com/sites/kooffice/training/i want to/courtesy wireless access.aspx" target="_blank">visit DWP</a> to learn more.--></p></td>
    </tr>
    
  </tbody></table>
  </div>
  </center>
</body>

1 个答案:

答案 0 :(得分:1)

你正在从浏览器复制一个xpath - 这是非常不可靠的。我不知道网站是否有不同的HTML,具体取决于地区。但是我没有“强”标签或“中心”标签。

做一个不依赖于你从浏览器获得的xpath的正确的xpath - 它们容易发生变化,并且如果发生小的变化就会破坏你的程序(已经证明xpath在我的末尾不起作用) )。做一个简单的很容易。因为你现在拥有的东西并没有清楚地表明你想要什么,而依赖于标签的属性和内容的xpath会。

另外要扩展你的后续问题,因为我已经知道你要做什么了...你不能只使用HtmlAgilityPack输入你的用户名和密码然后登录。你可以分析使用Fiddler的webpackets并复制您的登录方式。或者您可以更轻松地使用Selenium和无头浏览器,例如Phantomjs。

最后。当您确实使用xpaths查看PAGE SOURCE时。不要检查元素。页面源代表加载到HtmlDocument中的HTML。如果你检查元素,你会在网站上的某些步骤发生之后得到源代码(例如,如果网站依赖于JS og ajax来更新内容)。