2017-12-12 21 views
0

Webサイトからデータをスクラップするバッチプログラムを作成しています。スクラップ中にプログラム全体ではなくWebBrowserインスタンスをスリープします。

private async void buttonInfoJobs_Click(object sender, EventArgs e) 
{ 
    const string C_UrlTemplate= "https://www.mysite.it/{0}"; 

    var _searches = new List<Get_SiteSearchResult>(); 
    using (JobsDataContext db = new JobsDataContext()) 
    { 
     _searches = db.Get_SiteSearch("JOBS").ToList(); 
     foreach (var s in _searches) 
     { 
      WebBrowserJobs wb1 = new WebBrowserJobs(); 
      Uri uri = new Uri(String.Format(C_UrlTemplate,s.SkillTech)); 

      wb1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowserJobs_DocumentCompleted); 
      wb1.Navigating += new WebBrowserNavigatingEventHandler(webBrowserJobs_Navigating); 

      wb1.Url = uri; 

     } 
    } 
} 

問題は、私がスクラップに持っているウェブサイトは、ページにJavascriptを実施して、ページを取得することで、ウェブブラウザがリロードされる異なる時間:

この

はコードです。

これは完璧に動作し、私は、URLだけを求めるならば、イベントをDocumentCompleted 6回を解雇されたが、最終的に私はコンテンツが必要ます。

私はループ内で別のURLを尋ねなければならないときに問題が発生します。ウェブサイトにはcaptcha検証が必要です。

私は推敲中にX秒の遅延を実装することにより、これを避けることができますが、私はあったかと分からない:

私はSystem.Threading.Thread.Sleep(5000)を入れた場合は、すべての実行があります私はウェブブラウザの1つのタスクだけを遅らせたいと思っています...

どうすればいいですか?

+1

これは既に 'async'なので、なぜ' await Task.Delay(1000); '? – Equalsk

+0

これは私を大いに助けましたが、私はWebBrowserインスタンスだけを遅らせたいと思っています... – DarioN1

+0

WebBrowserインスタンスを遅らせることが何を意味するのか分かりません。 WebBrowserに何かをさせたくない場合は、何かをするように指示したり、何かを指示する前に待ってください。 – Equalsk

答えて

1

私はおそらくもWebScraperについてのあなたの最後の質問に答えてきたので、私は再びあなたを助けるつもりです;)

あなただけの次を使用することができますので、あなたはすでに、関数定義でasyncキーワードを持っていますコード:

await Task.Delay(5000); 
+0

こんにちはサイモン、はいそれは私でした;-) 私はあなたの解決策を試してみてください! – DarioN1

+0

これは私を大いに助けましたが、私はWebBrowserインスタンスを遅らせたいと思っています... – DarioN1

関連する問題