delphi网络浏览器从网站复制文本

标签 delphi twebbrowser

在我的应用程序中,我想将网站中的所有文本复制到字符串变量中。由于 Indy 的一些问题,我想使用网络浏览器组件。

以下代码非常适合我:

procedure TForm1.Button1Click(Sender: TObject);
begin
  WebBrowser1.Navigate('www.tribalwars.nl');
  while WebBrowser1.Busy do
    Application.ProcessMessages;
  Memo1.Lines.Add((WebBrowser1.Document as IHTMLDocument2).body.innerText);
end;

但是,在上面的示例中,我使用了在 Form1 上手动创建的 Web 浏览器。 现在我想在运行时创建它。我尝试了以下代码:

procedure TForm1.Button2Click(Sender: TObject);
var Web: TWebBrowser;
begin
  Web := TWebBrowser.Create(nil);
  Web.Navigate('www.tribalwars.nl');
  while Web.Busy do
    Application.ProcessMessages;
  Memo1.Lines.Add((Web.Document as IHTMLDocument2).body.innerText); //This line raises the error mentioned below
  Web.Free;
end;

不幸的是,它不断引发以下错误:

项目 Project1.exe 引发异常类 $C0000005,并显示消息“0x005d9b4f 处的访问冲突:读取地址 0x00000000”。

我想我正在尝试使用尚未创建的东西,或者在那个方向的某个地方。 我希望有人能帮助我让它发挥作用!

编辑:whosrdaddy 提到我应该使这个组件可见。我怎样才能做到这一点?我尝试了这个,但它不起作用:

procedure TForm1.Button2Click(Sender: TObject);
var Web: TWebBrowser;
begin
  Web := TWebBrowser.Create(nil);
  Web.Left := 50;
  Web.Top := 50;
  Web.Width := 50;
  Web.Height := 50;
  Web.Visible := True;

  Application.ProcessMessages;
  Web.Navigate('www.tribalwars.nl');
  while Web.Busy do
    Application.ProcessMessages;
  Memo1.Lines.Add((Web.Document as IHTMLDocument2).body.innerText);
  Web.Free;
end;

最佳答案

问题是,当您动态创建 TWebBrowser 并将 NIL 作为所有者传递时,不幸的是父级也是 NIL。需要一个非 NIL 父级来显示任何内容。

通常你会这样做:

变量 pnl浏览器:TPanel; 网页:TWebBrowser;

Web := TWebBrowser.Create(nil); Web.Parent := pnlBrowser;

但是,不幸的是,您也不能(直接)执行此操作(如果尝试,您会收到错误消息“只读属性”)。

但幸运的是,有一种方法可以规避这个问题:

TWinControl(Web).Parent := pnlBrowser;//这工作正常!

我不知道为什么 TWebBrowser 类的父属性是只读的。

还可以阅读 Delphi 文档

TControl(Web).Parent := pnlBrowser;//这也应该有效

作为旁注:

如果您有 TmsMediaPlayer 组件(Microsoft Windows Media Player 的 ActiveX 版本),则使用 Delphi 的 Parent 属性设置父级将停止任何视频播放,但直接通过 Windows API 调用进行设置则不会。

如果您想使用 TWebBrowser 播放视频,动态更改 Parent 属性也可能会停止任何视频播放。如果是这样,值得尝试直接使用 Windows API 调用来更改父级,以避免停止在网络浏览器中播放视频。

关于delphi网络浏览器从网站复制文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35708070/

相关文章:

德尔福 2007 和 XE2 : Using NativeInt

delphi - 选择Excel表格

delphi - 对于高度非常小的窗口,WM_SIZING 中的辅助信息错误

delphi - 仅知道服务名称即可获取服务的内存信息

javascript - 如何在 FireMonkey TWebBrowser 中旋转照片

delphi - 如何在TWebBrowser中检测打印命令是否完成?

c++ - 如何在系统默认浏览器中打开来自 TCppWebBrowser 组件的链接

Delphi (DataSnap) 慢

Delphi TWebBrowser 中的 Javascript,关闭线程

delphi - 从 TWebBrowser 打印