使用Delphi XE3 TChromium中的组件完成工作 需要获取加载页面的内容 论坛找到了工作代码的例子:
procedure DoWork (const doc: ICefDomDocument);
var
q: ICefDomNode;
begin
q: = doc.GetElementById ('q');
if Assigned (q) then q.SetElementAttribute ('value', 'Hello, world');
end;
procedure actDomExecute;
var
q: ICefDomNode;
begin
crm.Browser.MainFrame.VisitDomProc (DoWork);
end;
但调试器以某种方式绕过了顽固的DoWork的执行。在什么可能是一个捕获?
答案 0 :(得分:1)
我让tChromium在Delphi 7下工作,它应该都是一样的。
我从DOM中读取元素的步骤
首先我从这个项目得到了一个包装器: https://code.google.com/p/delphichromiumembedded/downloads/detail?name=dcef-r306.7z&can=2&q=
还有一个用于XE2,将其转换为XE3并不需要太多,如果您需要帮助,我很乐意根据您的要求提供帮助。
然后在tchromium中声明一个开始和结束
procedure TMainForm.crmLoadStart(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame); begin
if (browser <> nil) and (browser.GetWindowHandle = crm.BrowserHandle) and ((frame = nil) or (frame.IsMain)) then FLoading := True;
end;
,
procedure TMainForm.crmLoadEnd(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; httpStatusCode: Integer; out Result: Boolean);
begin
if (browser <> nil) and (browser.GetWindowHandle = crm.BrowserHandle) and ((frame = nil) or (frame.IsMain)) then begin
FLoading := False;
// see if loaded
while(httpStatusCode <> 200) do begin
Application.ProcessMessages;
Sleep(50);
end;
browser.GetMainFrame.VisitDomProc(DomProc);
end;
end;
声明一个名为domproc的过程,如下所示:
procedure DomProc(const Doc: ICefDomDocument);
var
Node: ICefDomNode;
begin
url := Doc.BaseUrl;
if(url='www.goodwebsite.com') then // check if it is the right page and not add
Node := Doc.Body.Document.GetElementById('idofwhatyouarelookingfor');
Node.SetElementAttribute('value','Hello world :D');
end;
这是我到目前为止找到的最可靠的方式,你需要确保页面装载良好,并且你正在获得正确框架的dom。
希望它对您有所帮助,请务必查看上面下载链接中的示例代码,这对我帮助很大。
有趣的编码,Delphi摇滚!