2013-10-13 28 views
1

我想從網站中提取一些信息。但是當我導航到它時,它動態加載一個php頁面之前使用javascript將我連接到服務器。我可以使用開發人員工具按照Chrome中的順序進行操作。我想通過Webbrowser控件在C#中重現它是最簡單的,只需導航到網站即可。然後webbrowser控件必須包含所有的javascript文件,動態加載的php頁面中的文本等等。但是,這是真的,他們存儲在控制的地方?我似乎無法找到它們。WebBrowser控件 - 查看導航到網站時加載的文件

+0

你可以給一個網址,我可以試試嗎? –

+0

如果頁面使用AJAX或其他動態JavaScript,那麼確定元素何時準備好就是非確定性的。至少,你應該在頁面的'window.onload'被觸發後執行web-scrapping。 [此示例](http://stackoverflow.com/a/19063643/1768303)可能是一個很好的起點。 – Noseratio

回答

0

重新創建在Chrome中實現的整個序列圖將是很多工作。但是,「從網站中提取一些信息」可以很容易地完成。

聲明:我認爲這個問題是對WPF的WebBrower控制(這將是對的WinForms幾乎相同)

你可以得到HTMLDocument一旦加載頁面時,使用:

using mshtml; // <- don't forget to add the reference 

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 

     browser.Navigate("http://google.com/"); 
     browser.LoadCompleted += browser_LoadCompleted; 
    } 

    void browser_LoadCompleted(object sender, NavigationEventArgs e) 
    { 
     HTMLDocument doc = (HTMLDocument)browser.Document; 
     string html = doc.documentElement.innerHTML.ToString(); 
     // from here, you should be able to parse the HTML 
     // or sniff the HTMLDocument (using HTML Agility Pack for instance)   
    } 
} 

從這個HTMLDocument,你可以訪問很多屬性,包括HTML元素,CSS樣式和腳本。我邀請您設置一個斷點並查看最適合您需求的內容。

儘管如此,由於您要加載的頁面使用JavaScript來填充其內容,因此在LoadCompleted加註時HTMLDocument可能不會完成。

在這種情況下,我建議使用計時器輪詢,直到內容穩定。

您也可以使用HTMLDocument注入自己的JavaScript代碼,並調用通過WebBrowser.ObjectForScripting的C#方法,但這會變得更加複雜和難以維護。

相關問題