gpt4 book ai didi

delphi - Chromium:如何获取加载页面的所有形式

转载 作者:行者123 更新时间:2023-12-03 15:12:14 27 4
gpt4 key购买 nike

我尝试获取加载页面的所有表单的名称。我已经这样做了:

procedure TForm2.Button2Click(Sender: TObject);
var
L: TStringList;
begin
L := TStringList.Create;

try
Chromium1.Browser.MainFrame.VisitDomProc(
procedure (const doc: ICefDomDocument)
procedure IterateNodes(Node: ICefDomNode);
begin
if not Assigned(Node) then Exit;
repeat
if Node.ElementTagName = 'FORM' then
L.Add(Node.GetElementAttribute('name'));

if Node.HasChildren then IterateNodes(Node.FirstChild);

Node := Node.NextSibling;
until not Assigned(Node);
end;
begin
IterateNodes(doc.Body);
end
);

ShowMessage(L.Text);
finally
FreeAndNil(L);
end;
end;

但是我没有任何结果。有什么想法吗?

谢谢

最佳答案

使用 XE2 更新 4

我已经意识到,运行过程参数时程序流程会继续,因此在到达 ShowMessage 时仍然没有运行该过程,因此 TStringList 为空。

我放置了一个 bool 变量控件,它工作正常,但这不是一个优雅的解决方案。

这里是新代码:

procedure TForm2.Button2Click(Sender: TObject);
var
L: TStringList;
Finish: Boolean;
begin
L := TStringList.Create;
Finish := False;

try
Chromium1.Browser.MainFrame.VisitDomProc(
procedure (const doc: ICefDomDocument)
procedure IterateNodes(Node: ICefDomNode);
begin
if not Assigned(Node) then Exit;
repeat
if SameText(Node.ElementTagName, 'FORM') then
begin
L.Add(Node.GetElementAttribute('name'));
end;

if Node.HasChildren then
IterateNodes(Node.FirstChild);

Node := Node.NextSibling;
until not Assigned(Node);
end;
begin
IterateNodes(doc.Body);
Finish := True;
end
);

repeat Application.ProcessMessages until (Finish);
ShowMessage(L.Text);
finally
FreeAndNil(L);
end;
end;

关于delphi - Chromium:如何获取加载页面的所有形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12866605/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com