2

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

Ex2:<输入类型=“提交”值=“登录”>

上面两个例子是通过 Delphi 在网页上按下按钮的。Ex2 在各种网站上运行良好,但不是全部。这是因为 Ex2 仅适用于 HTML 按钮吗?我尝试了 Ex1,但缺少一些代码,当我尝试时,我收到一条消息,提示“需要对象或类类型”。Ex1 也没有示例代码,任何人都可以告诉我为什么我会收到此消息并为 Ex1 提供一些代码。

4

3 回答 3

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;
于 2012-10-26T09:42:07.380 回答
0

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

在uses子句中包含unit MSHTML,然后use IHTMLDocument3(WebBrowser1.Document),和定义的不同接口MSHTML,如IHTMLElementand IHTMLAnchorElement。您会发现在某种程度上您还可以完成代码,但您可能需要在操作符之类的IHTMLElement操作之间进行额外的转换。IHTMLElement2as

于 2012-10-25T19:24:06.133 回答
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;

跟踪这一点,一次执行一行,您可以检查在每个遍历步骤中将发出哪些值和数据类型。

于 2012-10-26T06:45:25.213 回答