TWebBrowser Delphi控件提供了从Delphi应用程序访问Web浏览器功能的功能,允许您创建自定义Web浏览应用程序,或向应用程序添加Internet、文件和网络浏览、文档查看和数据下载功能。
web表单或web页面上的表单允许web页面访问者输入在大多数情况下发送到服务器进行处理的数据。
最简单的web表单可以由一个输入元素(编辑控件)和一个提交按钮组成。大多数网络搜索引擎(如谷歌)都使用这种网络表单来允许您搜索互联网。
更复杂的web表单包括下拉列表、复选框、单选按钮等。web表单非常类似于带有文本输入和选择控件的标准windows表单。
每个表单都会包含一个按钮—提交按钮—告知浏览器对web表单采取操作(通常将其发送到web服务器进行处理)。
如果在桌面应用程序中使用TWebBrowser显示网页,则可以通过编程方式控制web表单:操纵、更改、填充web表单的字段并提交表单。
下面是一组自定义Delphi函数,您可以使用这些函数列出网页上的所有web表单、检索输入元素、以编程方式填充字段并最终提交表单。
为了更容易地理解这些示例,假设Delphi(标准Windows)窗体上有一个名为“WebBrowser1”的TwebbBrowser控件。
注意:为了编译这里列出的方法,应该将mshtml添加到uses子句中。
在大多数情况下,一个网页只有一个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”事件处理的其他过程。
在任何情况下,网页都可以通过编程控制,唯一的问题是“你准备走多远?”
...用程序,CGIs是使web具有动态性和交互性的核心。下面是使用CGIs增强用户体验的一些主要好处。 ...
...Query教程中关于AJAX的第五部分,但今天我将向您展示如何使用AJAX动态发送web表单。JQuery是迄今为止使用AJAX最简单的方法,如果您是初学者,请查看我们的入门教程。我们直接跳进去吧。 ...
... 使用PDF最常见的任务是填充它。Windows、macOS、Linux或Chrome操作系统上最好的PDF阅读器不允许您更改PDF中的任何内容。最快最简单的方法是使用Paperjet。 ...
... 实际上,攻击者使用会话劫持来备份CSRF攻击。使用此组合时,攻击者可以使用劫持来更改受害者的IP地址。 ...
...制Google帐户的回复开始。对您的表单做出响应的用户需要使用Google帐户登录才能做出响应,每个帐户只能有一个响应。 相关:谷歌表单初学者指南 这将有助于提高回答的质量,防止重复回答。首先,在桌面web浏览器中打开googlef...
...络的调查,但你所需要的只是一个谷歌帐户和谷歌文档。使用谷歌表单轻松创建调查,将结果直接发送到谷歌表单。 与各种在线调查服务不同,谷歌对你能收到的回复数量没有限制。他们并不是想把你推销给一个花哨的付费调...
...,或者用手反复浏览网站,那就试试iMacros吧。它很容易使用-你所要做的就是执行一个动作一次。 iMacros非常适合任何在其web浏览器中执行重复任务的人,无论您是一个重复提交繁琐表单的普通用户,还是一个在复杂网站上执行...
...。WPF已经能够操纵嵌入其最低层次体系结构中的DirectX的使用,以提供诸如动画、2D和3D绘图、不同的音频和视频功能、固定和自适应文档、数据绑定和其他图形功能等功能。它基于.NET3.0,通过引入组合框、按钮等作为设计器的一...
...。它主要用于Web开发和生成动态Web页面。除了HTML之外还使用PHP,PHP代码实际上嵌入到HTML源文档中。 超文本标记语言(HTML)是一种众所周知的用于开发网页的标记语言。它已经存在了很长一段时间,是常用的网页设计。XML或可...
...快、更好地工作指南,在亚马逊和各地书店都有。你可以使用文本扩展工具来加速这个过程(更多细节请参见如何使用文本扩展来节省你每周的打字时间),但是你仍然需要在表单中用tab键来填写每个字段,而对于信用卡号等敏...