【问题标题】:C# How to open web page, identify element, input data and wait for next page?C#如何打开网页,识别元素,输入数据并等待下一页?
【发布时间】:2019-03-07 02:57:43
【问题描述】:

这个问题可能以不同的形式存在,但我需要向我解释如何完成以下...

我正在开发一个 Windows 窗体应用程序 (C#)。当我单击表单上的按钮时,我想导航到特定页面(全部在代码后面),通过 id 或类在该页面上找到一个 input[type=text],输入密码,然后单击下一步的登录按钮到输入。

然后我需要等待在单击登录按钮后将加载的页面,然后才能继续识别更多元素。 F.e 我想找到一个 html 表并遍历它。

如果有人能给我一个很好的例子并告诉我是否需要在我的表单中添加任何其他控件,我将不胜感激。

现在,正如我在上面所写的,我对打开浏览器并导航到该页面不感兴趣。可以这么说,我希望这一切都发生在代码中..

提前致谢!

【问题讨论】:

  • 使用 WebBrowser 类(不是控件)导航到登录地址,在输入字段中插入值,InvokeMember("click")Submit 元素上,然后使用 DocumentDownloadCompleted 事件确定何时加载新页面。您必须处理多个事件:当您第一次加载登录页面时(希望它只会引发一次事件),然后在加载登录页面时(它可能会引发多次事件)。使用ReadyState 标志来确定主文档何时已完全下载。

标签: c# html winforms


【解决方案1】:

你不需要爬网站找到type=text的输入。表单适用于 GETPOST 请求。登录表单通常是对服务器的POST 请求,您应该在该页面内搜索表单并查看它指向操作的位置。假设它是这样完成的:

<form action="login.php" method="post">

所以你知道login.php 将处理请求并且它使用post 方法。

现在您应该编写一些C# 代码来向http://yoururl.com/login.php 发送POST 请求(请参阅HttpWebRequest)。

一旦你得到它,因为它是一个登录,你应该找到一种方法来保持 cookie 处于活动状态,以便你可以在登录后向你必须访问的页面发送另一个请求。保持 cookie 处于活动状态意味着您已登录并且您的会话与您在上一个 POST 请求中登录的用户处于活动状态。

要完成这部分,您应该查看HttpWebRequest.CookieContainer

获得 cookie 后,您现在应该向下一页发送 GET 请求,然后您可以在其中抓取所需的信息。对网页的GET 请求会向您发送整个 html 页面作为响应。然后,您应该使用诸如HttpAgilityPack 之类的抓取库来获取您需要的表格。

尝试编写一些代码,并在遇到问题时返回,打开另一个问题。我希望我为您提供了一些有用的信息!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多