You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从TEdgeBrowser获取响应文本?附新建窗体调用TEdgeBrowser示例代码

实现TEdgeBrowser获取页面响应文本的方案

TEdgeBrowser基于Chromium内核,需要通过执行JavaScript脚本来获取页面的响应内容,具体实现步骤如下:

第一步:添加成员变量与事件声明

首先在TForm1的类定义中添加私有成员存储页面内容,同时声明导航完成事件的处理方法:

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    FPageResponseText: string; // 存储页面响应文本
    procedure BrowserFormClosed(Sender: TObject; var Action: TCloseAction);
    procedure BrowserNavCompleted(Sender: TObject; const AWebView: ICoreWebView2; const AArgs: ICoreWebView2NavigationCompletedEventArgs);
  public
  end;

第二步:绑定导航完成事件

修改原有Button1Click的代码,给TEdgeBrowser绑定导航完成事件,确保页面加载完成后再获取内容:

procedure TForm1.Button1Click(Sender: TObject);
var
  Form: TForm;
  Brws: TEdgeBrowser;
begin
  Form := TForm.Create(Self);
  Form.Width := 700;
  Form.Height := 700;
  Form.BorderStyle := bsDialog;
  Form.Position := poScreenCenter;
  Form.Caption := 'Google';
  Form.OnClose := BrowserFormClosed;

  Brws := TEdgeBrowser.Create(Form);
  TWinControl(Brws).Parent := Form;
  Brws.Align := alClient;
  // 绑定导航完成事件,页面加载完成后触发
  Brws.OnNavigationCompleted := BrowserNavCompleted;
  Form.Show;
  Brws.Navigate('http://google.com');
end;

第三步:实现获取页面内容的逻辑

在导航完成事件中执行JavaScript脚本获取页面内容,处理返回结果:

procedure TForm1.BrowserNavCompleted(Sender: TObject; const AWebView: ICoreWebView2; const AArgs: ICoreWebView2NavigationCompletedEventArgs);
var
  Brws: TEdgeBrowser;
begin
  Brws := Sender as TEdgeBrowser;
  // 判断导航是否成功
  if AArgs.IsSuccess then
  begin
    // 执行JS获取整个页面的完整HTML代码,要纯文本可以替换为 document.body.innerText
    Brws.ExecuteScript('document.documentElement.outerHTML',
      procedure(const AResult: HResult; const AResultObject: string)
      begin
        if Succeeded(AResult) then
        begin
          // 处理返回的JSON格式字符串,去掉首尾引号和转义字符
          FPageResponseText := AResultObject.Trim(['"']);
          FPageResponseText := StringReplace(FPageResponseText, '\"', '"', [rfReplaceAll]);
          FPageResponseText := StringReplace(FPageResponseText, '\n', #13#10, [rfReplaceAll]);
          // 这里可以直接处理获取到的内容,比如输出到日志、保存到文件
          // ShowMessage('页面内容获取完成,长度:' + IntToStr(Length(FPageResponseText)));
        end;
      end);
  end;
end;

补充说明

  • 如果只需要页面的纯文本内容,将JS代码替换为document.body.innerText即可
  • 如果需要获取特定接口的响应内容而非页面HTML,需要监听CoreWebView2的WebResourceRequested事件,拦截对应请求的响应体
  • ExecuteScript的回调是异步执行的,如果需要在窗体关闭时拿到最终内容,可以在BrowserFormClosed事件中等待回调完成,或者判断FPageResponseText是否已赋值

内容的提问来源于stack exchange,提问作者Blawjack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 11:54:02