0

Webページからデータを抽出しようとしていますが、多くのインデックスがあり this.webBrowser1.Document.InvokeScript("__doPostBack", new object[] { "ctl00$ContentPlaceHolder1$gvTickets", "Page$2" }); 、これらのコードは機能しており、Webブラウザーの2番目のページに移動していますが、デバッグ時にdocumentcompletedメソッドに戻りません。セカンドページで応答テキストを取得するにはどうすればよいですか

4

1 に答える 1

1

これがコードサンプルです。このメソッドはコンソール アプリケーションから呼び出されます。したがって、コンソール アプリケーションを使用している場合は、スレッドが実行され、[STAThread] 属性がメイン メソッドに追加されます。documentCompleted は、条件が失敗するまで再帰的に呼び出されます。

protected override void StartScan( string url )
    {
        WebBrowser browser = new WebBrowser();
        int i = 1;
        Thread thread = new Thread( () =>
        {
            WebBrowserDocumentCompletedEventHandler documentCompleted = null;
            documentCompleted = async ( o, s ) =>
            {

                if ( i < 27 )
                {

                    HtmlAgilityPack.HtmlDocument document = new HtmlAgilityPack.HtmlDocument();
                    document.LoadHtml(browser.DocumentText);
                    List<Establishment> establishments = GetEstablishments(document).ToList();
                    SaveResults(establishments);
                    string var = i < 10 ? "0" + i.ToString(CultureInfo.InvariantCulture) : i.ToString(CultureInfo.InvariantCulture);
                    browser.Navigate( string.Format( "javascript:__doPostBack('SchoolDirectoryWebPart1$ctl{0}','')", var ) );
                    i++;
                } else {
                    browser.Dispose();
                    Application.ExitThread();
                }
            };


            browser.ScriptErrorsSuppressed = true;
            browser.DocumentCompleted += documentCompleted;
        browser.Navigate( url );
            Application.Run();

        } );
        thread.SetApartmentState( ApartmentState.STA );
        thread.Start();
    }
于 2013-10-25T14:33:25.650 に答える