Ex1:WebBrowser.OleObject.Document.GetElementByID('ID HERE').Click;
Ex2:< input type="submit" VALUE="Login" >
以上两个示例用于通过Delphi按网页上的按钮。 Ex2适用于各种网站但不是全部。这是因为Ex2仅适用于HTML按钮吗?我尝试过Ex1,但是有些代码丢失,当我尝试它时,我收到一条消息,说“需要对象或类类型”。此外,Ex1没有示例代码,任何人都可以填写我为什么收到此消息并为Ex1提供一些代码。
答案 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
定义的不同接口,例如IHTMLElement
和IHTMLAnchorElement
。您会发现在某些时候您也可以获得代码完成,而且您可能需要在IHTMLElement
和IHTMLElement2
之间使用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;
跟踪此项,一次执行一行,您可以检查每个遍历步骤中将发出的值和数据类型。