-1

我需要知道如何使用 Delphi XE3 填写 Web 表单?我有一个带有用户名和密码的网络表单,那么如何以编程方式填写它?

该页面是http://batelco.com/portal看到只有两个输入用户名和传递那么如何填写和传递它们?

4

2 回答 2

1

使用 Internet Direct (Indy) HTTP 客户端类,您可以使用 HTTP POST 向服务器提交表单值。

如果已将 TIdCookieManager 类的实例分配给 IdHTTP 客户端组件,Indy HTTP 客户端还将接收并存储服务器随其响应发送的 cookie。

当客户端向服务器上的其他安全 URL 发出进一步的 HTTP 请求时,许多安全 Web 应用程序都需要 HTTP cookie。然后,Indy HTTP 客户端将随请求一起发送 cookie(如果已将 TIdCookieManager 分配给 IdHTTP 客户端组件)。

因此,您可以在登录 URL 上发送登录 POST 请求,提供所需的身份验证信息,然后向下载统计信息 URL 发送 GET 请求以检索其 HTML。


关于您使用 ASP 的特定登录表单,这里有一个关于以编程方式发送 POST 请求的问题:HowTo deal with cryptic hidden values for ASP Net (__VIEWSTATE)

于 2013-04-26T11:34:02.173 回答
0

本文展示了如何获取和设置命名元素的属性。

您应该获取和设置value属性。表单元素的 ID 取决于您的页面。

检查具有 ID 的元素是否有值


这篇文章虽然被问到“如何阅读”,但也描述了如何获取值以及如何设置它们。毕竟如果你可以做A := B(​​读取值),那么你可能也可以做B := A(设置值)。

阅读网页浏览器输入字段中的内容


现在,问题中给出了页面 URL,我们可以用右键单击 WWW 浏览器中右上角的登录表单元素,然后选择“检查元素”以查看其来源。或者,如果浏览器不是现代的并且菜单上没有检查命令,我们可以使用另一个命令,喜欢View page source并在整个页面的源中查找表单。例如,这些元素之一是

<input name="txtUsername" type="text" maxlength="15"
 id="txtUsername" tabindex="1" class="inpu-field" onfocus="txtfocus();"
 onblur="txtblur();" style="color: gray; background-image: none;">

因此我们知道表单的第一个元素的 ID,我们需要获取(读取)或设置(写入)其“值”属性。上面的链接显示了如何做到这一点,给定已知的 ID。

顺便说一句,你给你的页面错了,真正的页面https://www.e-services.com.bh/Eservices/login_batelco.aspx

那么您的原始页面呢,它只是不适用于默认模式下的 TWebBrowser MSIE6 - 为了与所有使用 Microsoft ActiveX 组件的编写应用程序兼容。见http://imgur.com/ad4wbOI

如果可以使用 Google Chrome 代替 TWebBrowser。或者您可以将 ActiveX 接口作为 TWebBrowser 属性之一,获取新接口并关闭 MSIE6 兼容性http://msdn.microsoft.com/en-us/library/aa752510.aspx

但是,“如何使此页面在 twebbrowser 中呈现”是另一个新问题,而不是您在此处提出的问题。


实际上,我不投票赞成将这个问题作为重复而结束的唯一原因是因为上述文章的标题中都没有“设置”或“写入”或“填充”,因此找到它们比微不足道更难。


但是,如果页面在加载时没有发生变化,并且没有像 CAPTCHA 或唯一表单哈希码这样的一次性保护,那么您可以使用单个 HTTP 请求发布所有值,甚至无需加载表单。

于 2013-04-26T09:39:44.377 回答