1

Webサイトからいくつかの情報を抽出しようとしています。しかし、そこに移動すると、phpページを動的にロードする前に、javascriptを使用してサーバーに接続します。開発者ツールを使用して、Chrome でシーケンスをたどることができます。Webbrowser コントロールを使用して C# で再現し、単に Web サイトに移動するのが最も簡単だと考えました。次に、webbrowser コントロールには、すべての javascript ファイル、動的にロードされた php ページからのテキストなどを含める必要があります。しかし、これは本当で、コントロールのどこに保存されているのでしょうか? 私はそれらを見つけることができないようです。

4

1 に答える 1

0

Chrome に実装されているシーケンス図全体を再作成するのは大変な作業です。しかし、「Webサイトから情報を抽出する」というのは、割と簡単にできることです。

免責事項:この質問は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 を使用してコンテンツを埋めているため、が発生HTMLDocumentした時点で が完了しない可能性がありますLoadCompleted

その場合、コンテンツが安定するまでタイマーを使用してポーリングすることをお勧めします。

を使用HTMLDocumentして独自の JavaScript コードを挿入し、 を介して C# メソッドを呼び出すこともできますWebBrowser.ObjectForScriptingが、これははるかに複雑で維持が難しくなります。

于 2013-10-13T09:27:53.780 に答える