2013-04-26 56 views
-1

我需要知道如何使用Delphi XE3填充Web表单?我有一个用户名和密码的Web表单,所以如何以编程方式填充它?如何填写使用delphi XE3的web表单输入?

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

+1

也许你并不需要填补,但只后呢?如果表单不包含验证码或类似的一次性保护,则可以提交结果而无需加载表单。 – 2013-04-26 09:29:45

+2

如果您只需要在后台进行简单的POST或GET HTTP请求,则绝对不能使用'TWebBrowser'控件并以编程方式填写表单。 – 2013-04-26 09:36:10

+0

@AndreasRejbrand似乎他开始用户登录序列。鉴于WWW页面很少使用标准的HTTP Auth,页面可能会使UTL或cookie或隐藏形式变得怪异,或者上帝知道是什么。在这种情况下,登录/密码并不难,但了解身份验证是如何进行的并且应该传递给后面的页面将是一个单独而又相当复杂的问题。因此,加载页面可能是必需的东西,像MS或者其他引擎一样进入MSIE,但仍然如此。 – 2013-04-26 09:45:24

回答

1

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

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

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

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


关于你提到的具体的登录表单,它采用ASP,这里是一个有关以编程方式发送POST请求的问题:HowTo deal with cryptic hidden values for ASP Net (__VIEWSTATE)

+0

该人甚至无法理解该页面是否是实际的登录表单,并且您建议他跨域Cookie处理和复合跨域页面手动解析。虽然这应该是最有效的方式,但我认为他不会这样做。 – 2013-04-26 13:04:17

+0

@ Arioch'The我没有提到或者暗示“跨域曲奇”处理的任何地方 – mjn 2013-04-26 14:01:11

+0

你不这样做,但页面使用登录表单来回mquite不同的域名,在登录时设置cookie将不得不对原来的域名使用最多可能 – 2013-04-26 16:22:06

0

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

你应该得到并设置value属性。什么样的ID会形成元素取决于你的页面。

Check if Element with ID has a value


本文一边问道“如何阅读”还介绍了两个如何获得价值以及如何对其进行设置。如果你可以做A := B(读取值),那么你可能也可以做B := A(设定值)。

read content in webbrowser input field


现在,该页面的URL中我们可以点击右按钮WWW浏览器右上角的登录表单元素,并选择“检查元素”看题所给其来源。或者,如果浏览器不是现代的,并且没有菜单上的Inspect命令,我们可以使用另一个推荐,如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;"> 

因此,我们知道知道或形式的第一元件,其“value”属性,我们需要得到(读出)设置(写入)的ID。 上面的链接显示了如何做到这一点,给出已知的ID。

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

有关原始网页,它只是不与MSIE6工作是TWebBrowser在默认模式下怎么办 - 兼容所有的使用Microsoft ActiveX组件编写的应用程序。请参阅http://imgur.com/ad4wbOI

如果可以使用Google Chrome代替TWebBrowser。 或者你可以到达的ActiveX接口TWebBrowser属性之一,并获得新的界面和关闭MSIE6兼容性http://msdn.microsoft.com/en-us/library/aa752510.aspx

但是,“如何使这个页面呈现在twebbrowser”是另一个新的问题,而不是你在这里问的问题。


其实,唯一的原因,我为什么不选结束这个问题的重复,是因为上面没有的物品具有“设置”或“写入”或在其标题为“补”,所以找到他们比平凡更难一点。


但是,如果页面没有突变负荷和不具备一些一次性的保护状CAPTCHA或独特的形式哈希码,那么你就可以张贴所有单个HTTP请求的值,甚至没有加载形成。

+0

告诉我怎么做?顺便说一句,部分用户名和密码不能显示在twebbrowser中!如何阅读它! – Dreamer64 2013-04-26 12:04:42

+0

如果他们“不能显示”,那么这是另一个问题。如果您的用户无法看到在哪里点击并输入文字 - 那么您无需阅读。如何在Delphi + MSIE中加载该页面,请另外提出问题。 或者你可以使用Delphi + Chrome或Delphi + THTMLViewer – 2013-04-26 12:18:38

+0

如果我使用Internet Explorer它没有问题,但它使用Delphi的twebbrowser它不是!这是问题发生的地方! – Dreamer64 2013-04-26 12:25:05