通过Delphi在网页上按下按钮

时间:2012-10-25 10:34:23

标签: delphi button twebbrowser

Ex1:WebBrowser.OleObject.Document.GetElementByID('ID HERE').Click;

Ex2:< input type="submit" VALUE="Login" >

以上两个示例用于通过Delphi按网页上的按钮。 Ex2适用于各种网站但不是全部。这是因为Ex2仅适用于HTML按钮吗?我尝试过Ex1,但是有些代码丢失,当我尝试它时,我收到一条消息,说“需要对象或类类型”。此外,Ex1没有示例代码,任何人都可以填写我为什么收到此消息并为Ex1提供一些代码。

3 个答案:

答案 0 :(得分:1)

我从delphipages获得了以下代码:MrBaseball34 它最初没有用,因为我写了'WebBrowser'而不是'WebBrowser1'。但它完美无缺。 这是代码:

procedure TForm1.Button1Click(Sender: TObject);  
var  
x: integer;  
thelink: OleVariant; 

begin  
thelink:= WebBrowser1.OleObject.Document.all.tags('A');  
if thelink.Length > 0 then  
  begin  
  for x := 0 to thelink.Length-1 do  
    begin  
    if Pos('put id string here', thelink.Item(x).id) > 0 then
      begin  
        thelink.Item(x).click;  
        Break;
      end;
    end;
  end;
end;

答案 1 :(得分:0)

当使用TWebBrowser和COM / ActiveX对象时,了解后期绑定和早期绑定之间的区别非常方便。如果您使用OleVariant变量,让它们引用'live'对象,并使用点运算符(.)来调用方法和属性,它们将在运行时得到解析。它们是后期绑定,而不是早期绑定,您将使用特定接口。

在uses子句中包含单元MSHTML,然后使用IHTMLDocument3(WebBrowser1.Document)以及MSHTML定义的不同接口,例如IHTMLElementIHTMLAnchorElement。您会发现在某些时候您也可以获得代码完成,而且您可能需要在IHTMLElementIHTMLElement2之间使用as运算符进行额外强制转换。

答案 2 :(得分:0)

可能存在任何错误。像拼写错误的ID或错误的数据类型缺少您希望使用的界面,或缺少某些项目并返回nil

WebBrowser.OleObject.Document.GetElementByID('ID HERE').Click;这样的长行问题是你很难说出错误发生在哪个地方。有时检查中间值及其属性并不容易。在这么长的时间里,有很多天生的期望被编码,你很难发现哪一个是失败的。

当你遇到这么长的错误时,你最好把它们分成微小的动作项目 - 好的划分和征服原则。声明几个变量并将这个长复杂的行分成多个简单的行。

var0 := WebBrowser;
var1 := var0.OleObject; 
var2 := var1.Document; 
var3 := var2.GetElementByID('ID HERE'); 
var3.Click;

跟踪此项,一次执行一行,您可以检查每个遍历步骤中将发出的值和数据类型。