2016-02-29 69 views
2

在我的應用程序中,我想將網站中的所有文本複製到字符串變量中。由於Indy的一些問題,我想使用webbrowser組件。delphi webbrowser從網站複製文本

下面的代碼工作完美的我:

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引發的異常類$ 0000005與消息「訪問衝突在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; 
+0

的組件提供所需的可見的(即,擁有者的形式)或其他它不會呈現頁面,因此文件將是零。把瀏覽器放在一個看不見的形式... – whosrdaddy

+0

@whosrdaddy:我怎樣才能看到它? (請參閱編輯開始帖子) – Teun

+0

只需在設計模式下使用瀏覽器創建第二個表單,並將表單可見屬性設置爲false,然後在運行時創建該表單... – whosrdaddy

回答

-1

1)試圖改變你的TWebBrowser組件TEmbeddedWB - 參數/事件都是相同+很多額外您可以使用... 2)我認爲這個問題是您創建瀏覽器的導航之後readyState的 - 它不是完全加載(+也許還沒有分配父)

嘗試使用下面的代碼(代替你的TWebBrowser組件名稱):

Web.Navigate('www.tribalwars.nl') 

repeat application.processmessages; until web.readystate=4;

Memo1.Lines.Add((Web.Document as IHTMLDocument2).body.innerText);