使用twebbrowser操作web表单

TWebBrowser Delphi控件提供了从Delphi应用程序访问Web浏览器功能的功能,允许您创建自定义Web浏览应用程序,或向应用程序添加Internet、文件和网络浏览、文档查看和数据下载功能。...

TWebBrowser Delphi控件提供了从Delphi应用程序访问Web浏览器功能的功能,允许您创建自定义Web浏览应用程序,或向应用程序添加Internet、文件和网络浏览、文档查看和数据下载功能。

Programming language

网络表单

web表单或web页面上的表单允许web页面访问者输入在大多数情况下发送到服务器进行处理的数据。

最简单的web表单可以由一个输入元素(编辑控件)和一个提交按钮组成。大多数网络搜索引擎(如谷歌)都使用这种网络表单来允许您搜索互联网。

更复杂的web表单包括下拉列表、复选框、单选按钮等。web表单非常类似于带有文本输入和选择控件的标准windows表单。

每个表单都会包含一个按钮—提交按钮—告知浏览器对web表单采取操作(通常将其发送到web服务器进行处理)。

以编程方式填充web表单

如果在桌面应用程序中使用TWebBrowser显示网页,则可以通过编程方式控制web表单:操纵、更改、填充web表单的字段并提交表单。

下面是一组自定义Delphi函数,您可以使用这些函数列出网页上的所有web表单、检索输入元素、以编程方式填充字段并最终提交表单。

为了更容易地理解这些示例,假设Delphi(标准Windows)窗体上有一个名为“WebBrowser1”的TwebbBrowser控件。

注意:为了编译这里列出的方法,应该将mshtml添加到uses子句中。

列出web表单名称,按索引获取web表单

在大多数情况下,一个网页只有一个web表单,但有些网页可能有多个web表单。以下是如何获取网页上所有web表单的名称:

function WebFormNames(const document: IHTMLDocument2): TStringList; var forms : IHTMLElementCollection; form : IHTMLFormElement; idx : integer; begin forms := document.Forms as IHTMLElementCollection; result := TStringList.Create; for idx := 0 to -1 + forms.length do begin form := forms.item(idx,0) as IHTMLFormElement; result.Add(form.name) ; end; end;

在TMemo中显示web表单名称列表的简单用法:

var forms : TStringList; begin forms := WebFormNames(WebBrowser1.Document AS IHTMLDocument2) ; try memo1.Lines.Assign(forms) ; finally forms.Free; end; end;

下面是如何通过索引获取web表单的实例。对于单个表单页面,索引将为0(零)。

function WebFormGet(const formNumber: integer; const document: IHTMLDocument2): IHTMLFormElement; var forms : IHTMLElementCollection; begin forms := document.Forms as IHTMLElementCollection; result := forms.Item(formNumber,'') as IHTMLFormElement end;

一旦有了web表单,就可以按名称列出所有HTML输入元素,可以获取或设置每个字段的值,最后可以提交web表单。

网页可以承载带有输入元素(如编辑框和下拉列表)的Web表单,您可以通过Delphi代码以编程方式控制和操作这些元素。

获得web表单后,可以按名称列出所有HTML输入元素:

function WebFormFields(const document: IHTMLDocument2; const formName : string): TStringList; var form : IHTMLFormElement; field : IHTMLElement; fName : string; idx : integer; begin form := WebFormGet(0, WebBrowser1.Document AS IHTMLDocument2) ; result := TStringList.Create; for idx := 0 to -1 + form.length do begin field := form.item(idx, '') as IHTMLElement; if field = nil then Continue; fName := field.id; if field.tagName = 'INPUT' then fName := (field as IHTMLInputElement).name; if field.tagName = 'SELECT' then fName := (field as IHTMLSelectElement).name; if field.tagName = 'TEXTAREA' then fName := (field as IHTMLTextAreaElement).name; result.Add(fName) ; end; end;

当您知道web表单上字段的名称时,可以通过编程方式获取单个HTML字段的值:

function WebFormFieldValue( const document: IHTMLDocument2; const formNumber : integer; const fieldName : string): string; var form : IHTMLFormElement; field: IHTMLElement; begin form := WebFormGet(formNumber, WebBrowser1.Document AS IHTMLDocument2) ; field := form.Item(fieldName,'') as IHTMLElement; if field = nil then Exit; if field.tagName = 'INPUT' then result := (field as IHTMLInputElement).value; if field.tagName = 'SELECT' then result := (field as IHTMLSelectElement).value; if field.tagName = 'TEXTAREA' then result := (field as IHTMLTextAreaElement).value; end;

获取名为“URL”的输入字段值的用法示例:

const FIELDNAME = 'url'; var doc :IHTMLDocument2; fieldValue : string; begin doc := WebBrowser1.Document AS IHTMLDocument2; fieldValue := WebFormFieldValue(doc, 0, FIELDNAME) ; memo1.Lines.Add('Field : "URL", value:' + fieldValue) ;end;

如果您无法填写web表单元素,则整个想法将毫无价值:

procedure WebFormSetFieldValue(const document: IHTMLDocument2; const formNumber: integer; const fieldName, newValue: string) ; var form : IHTMLFormElement; field: IHTMLElement; begin form := WebFormGet(formNumber, WebBrowser1.Document AS IHTMLDocument2) ; field := form.Item(fieldName,'') as IHTMLElement; if field = nil then Exit; if field.tagName = 'INPUT' then (field as IHTMLInputElement).value := newValue; if field.tagName = 'SELECT' then (field as IHTMLSelectElement) := newValue; if field.tagName = 'TEXTAREA' then (field as IHTMLTextAreaElement) := newValue; end;

提交网络表单

最后,当操作所有字段时,您可能希望从Delphi代码提交web表单。以下是方法:

procedure WebFormSubmit( const document: IHTMLDocument2; const formNumber: integer) ; var form : IHTMLFormElement; field: IHTMLElement; begin form := WebFormGet(formNumber, WebBrowser1.Document AS IHTMLDocument2) ; form.submit; end;

并非所有的网络表单都是“开放的”

某些web表单可能会承载验证码图像,以防止以编程方式操纵网页。

当您“单击submit按钮”时,某些web表单可能无法提交。某些web表单执行JavaScript或由web表单的“onsubmit”事件处理的其他过程。

在任何情况下,网页都可以通过编程控制,唯一的问题是“你准备走多远?”

  • 发表于 2021-09-20 09:20
  • 阅读 ( 205 )
  • 分类:编程

你可能感兴趣的文章

什么是cgi脚本,它们如何改进网站?

...用程序,CGIs是使web具有动态性和交互性的核心。下面是使用CGIs增强用户体验的一些主要好处。 ...

  • 发布于 2021-03-13 08:17
  • 阅读 ( 252 )

如何使用ajax发送web表单

...Query教程中关于AJAX的第五部分,但今天我将向您展示如何使用AJAX动态发送web表单。JQuery是迄今为止使用AJAX最简单的方法,如果您是初学者,请查看我们的入门教程。我们直接跳进去吧。 ...

  • 发布于 2021-03-14 16:09
  • 阅读 ( 219 )

5免费pdf编辑器网站,以创建,填写,注释或更改pdf文件

... 使用PDF最常见的任务是填充它。Windows、macOS、Linux或Chrome操作系统上最好的PDF阅读器不允许您更改PDF中的任何内容。最快最简单的方法是使用Paperjet。 ...

  • 发布于 2021-03-22 17:53
  • 阅读 ( 286 )

什么是csrf攻击?如何防止它们?

... 实际上,攻击者使用会话劫持来备份CSRF攻击。使用此组合时,攻击者可以使用劫持来更改受害者的IP地址。 ...

  • 发布于 2021-03-29 05:49
  • 阅读 ( 332 )

如何限制google表单中的响应

...制Google帐户的回复开始。对您的表单做出响应的用户需要使用Google帐户登录才能做出响应,每个帐户只能有一个响应。 相关:谷歌表单初学者指南 这将有助于提高回答的质量,防止重复回答。首先,在桌面web浏览器中打开googlef...

  • 发布于 2021-03-31 13:36
  • 阅读 ( 268 )

使用google表单创建一个基于web的调查

...络的调查,但你所需要的只是一个谷歌帐户和谷歌文档。使用谷歌表单轻松创建调查,将结果直接发送到谷歌表单。 与各种在线调查服务不同,谷歌对你能收到的回复数量没有限制。他们并不是想把你推销给一个花哨的付费调...

  • 发布于 2021-04-11 04:24
  • 阅读 ( 190 )

如何使用imacros自动化重复的web浏览器任务

...,或者用手反复浏览网站,那就试试iMacros吧。它很容易使用-你所要做的就是执行一个动作一次。 iMacros非常适合任何在其web浏览器中执行重复任务的人,无论您是一个重复提交繁琐表单的普通用户,还是一个在复杂网站上执行...

  • 发布于 2021-04-12 11:14
  • 阅读 ( 189 )

wpf公司(wpf)和asp.net(asp.net)的区别

...。WPF已经能够操纵嵌入其最低层次体系结构中的DirectX的使用,以提供诸如动画、2D和3D绘图、不同的音频和视频功能、固定和自适应文档、数据绑定和其他图形功能等功能。它基于.NET3.0,通过引入组合框、按钮等作为设计器的一...

  • 发布于 2021-06-23 20:04
  • 阅读 ( 193 )

菲律宾比索(php)和html格式(html)的区别

...。它主要用于Web开发和生成动态Web页面。除了HTML之外还使用PHP,PHP代码实际上嵌入到HTML源文档中。 超文本标记语言(HTML)是一种众所周知的用于开发网页的标记语言。它已经存在了很长一段时间,是常用的网页设计。XML或可...

  • 发布于 2021-07-12 07:19
  • 阅读 ( 172 )

如何自动填写重复的web表单(并避免大量繁琐的键入)

...快、更好地工作指南,在亚马逊和各地书店都有。你可以使用文本扩展工具来加速这个过程(更多细节请参见如何使用文本扩展来节省你每周的打字时间),但是你仍然需要在表单中用tab键来填写每个字段,而对于信用卡号等敏...

  • 发布于 2021-07-23 14:11
  • 阅读 ( 143 )
aupkr512
aupkr512

0 篇文章

相关推荐