【问题标题】:Get data from the website open in the WebBrowser从 WebBrowser 中打开的网站获取数据
【发布时间】:2017-01-25 17:15:32
【问题描述】:

在问this question 的人那里,我也遇到了同样的情况。我需要从保存为字符串的网站获取一些数据。

我的问题是,我需要从中保存数据的网站需要用户登录才能查看数据...

所以我的计划是让用户使用 WebBrowser 访问网站,然后登录,当用户在正确的页面上时,单击一个按钮,它将自动保存数据。

我想使用与我在开始时链接到的另一个问题的最佳答案中使用的方法类似的方法。

string data = doc.DocumentNode.SelectNodes("//*[@id=\"main\"]/div[3]/div/div[2]/div[1]/div[1]/div/div/div[2]/a/span[1]")[0].InnerText;

我试着做这样的事情:

string data = webBrowser1.DocumentNode.SelectNodes("//*[@id=\"main\"]/div[3]/div/div[2]/div[1]/div[1]/div/div/div[2]/a/span[1]")[0].InnerText;

但你不能做“webBrowser1.DocumentNode.SelectNodes”

我还看到另一个问题的答案说,他使用 HtmlAgilityPack,但我尝试下载它,但我不知道如何处理它..

C# 不是最好的,所以请不要评论太复杂的答案。或者至少尝试使其易于理解。

提前致谢:)

【问题讨论】:

  • 您需要对登录页面进行 POST,读取响应以获取 cookie 信息,并将 cookie/登录信息包含在任何进一步的 GET 请求中。你试过了吗:stackoverflow.com/questions/24845573/…
  • 这听起来太复杂了...
  • 不是——一旦你完成了登录例程,它实际上只有两种方法。根据您要对信息执行的操作,有几种更高级别的解决方案。我记得不久前使用过 WebReplay - 不知道它们是否还在。
  • 我在登录页面上找到了这段代码,我应该用它来做什么吗?我想我可以使用它,因为它是您输入用户名和密码的表单,并且它使用 POST 方法。
  • The code 1= 输入用户名的框,2= 输入密码的框。

标签: c# winforms


【解决方案1】:

以下是 HtmlAgilityPack 使用示例:

public string GetData(string htmlContent)
{
      HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();
      htmlDoc.OptionFixNestedTags = true;
      htmlDoc.LoadHtml(htmlContent);
      if (htmlDoc.DocumentNode != null)
      {
          string data = htmlDoc.DocumentNode.SelectNodes("//*[@id=\"main\"]/div[3]/div/div[2]/div[1]/div[1]/div/div/div[2]/a/span[1]")[0].InnerText;
          if(!string.IsNullOrEmpty(data))
             return data;
      }
      return null;
}

编辑:如果您想在浏览器中模拟某些操作,我建议您使用 Selenium 而不是常规的 WebBrowser 控件。这是下载它的链接:http://www.seleniumhq.org/ 或使用 NuGet 下载它。这是一个关于如何使用它的好问题:How do I use Selenium in C#?

【讨论】:

  • 谢谢,这可以获取数据,我只需要花一两分钟来弄清楚如何安装 HtmlAgilityPack。对于将来可能会阅读此内容的人,可以在 Visual Studio 内的(项目>管理 NuGet 包)下找到它...但是我该怎么办,如果我希望程序自动输入用户名和密码并按登录?程序启动时,浏览器会定位到登录页面,然后它应该会自动登录,然后使用您刚刚编写的代码获取数据。再次感谢您帮助我尝试使其正常工作! :)
  • 您所做的编辑回答了我的问题。谢谢你:)
猜你喜欢
  • 2017-12-01
  • 2013-01-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多