3

当我使用以下命令打开 Google 网页时:

WebBrowser1.Navigate('http://www.google.com.au/advanced_search?hl=en');

它在编辑框中打开光标。
所以当我使用:

WebBrowser1.ExecWB(OLECMDID_SELECTALL,OLECMDEXECOPT_PROMPTUSER,vaIn, vaOut);

它只复制光标所在的位置。不是整个网页,这是我想要复制的。我的代码是:

procedure Pause()
begin
//code to pause until page loads.
end;

procedure TForm2.Button22Click(Sender: TObject);
var s:String;
    vaIn, vaOut: OleVariant;
begin
    s:='http://www.google.com.au/advanced_search?hl=en';
    WebBrowser1.Navigate(s);
    while WebBrowser1.ReadyState <> READYSTATE_COMPLETE do
      begin
          Pause(1000);
      end;
//------->I need to put code here so the SELECTALL line of code works.<----------
//------->So the cursor isn't in to editbox but as if it has clicked  <---------- 
//------->the webpage                                                 <----------
    WebBrowser1.ExecWB(OLECMDID_SELECTALL,OLECMDEXECOPT_PROMPTUSER,vaIn, vaOut);
end;

如何选择整个网页?

4

2 回答 2

4

在全选之前尝试聚焦主体:

((WebBrowser1.Document as IHTMLDocument2).body as IHTMLElement2).focus();
WebBrowser1.ExecWB(OLECMDID_SELECTALL, OLECMDEXECOPT_PROMPTUSER, vaIn, vaOut);

话虽如此,更好的方法是使用document.body.innerText抓取文本,而不是像您那样模拟选择/复制。

于 2012-09-20T12:44:07.783 回答
1

http://social.msdn.microsoft.com/Forums/en-US/Vsexpressvc/thread/eef2f809-cadf-44a3-956e-e75925a4b85e 建议在复制前明确选择全部。这种方式仅在页面没有框架时直接有效(Google Advanced 有 IFRAME 并且 IHTMLBodyElement.CreateTextRange 失败)

但是像这样的后期绑定代码在 XE2/Win7x64/IE9 中有效:

procedure TForm2.btn2Click(Sender: TObject);
var HTML_Doc, oRange: OleVariant;
begin
  HTML_Doc := WebBrowser1.Document;
  oRange := HTML_Doc.body.createTextRange;
  oRange.select();

  WB_Copy(webbrowser1);
end;

WBCopy 取自 WBFunks 单元http://codingrus.ru/readarticle.php?article_id=721并归结为带有 OLECMDID_COPY、OLECMDEXECOPT_DODEFAULT 参数的 ExecWB 调用。

于 2012-09-20T12:10:46.363 回答