【发布时间】:2017-12-12 23:09:53
【问题描述】:
我正在编写一个从网站上抓取数据的批处理程序。
这是代码:
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 事件被触发了六次,但最终我得到了所需的内容。
当我必须在一个循环中询问不同的 url 时,问题就来了:网站需要验证码。
我可以通过在细化过程中实现 X 秒的延迟来避免这种情况,但我不知道如何并且是:
如果我输入 System.Threading.Thread.Sleep(5000),所有的执行都将停止,但我只想延迟 webbrowser 的单个任务...
我该如何继续?
【问题讨论】:
-
既然已经是
async,为什么不await Task.Delay(1000);? -
这对我帮助很大,但我只想延迟 WebBrowser 实例...
-
我不明白您所说的仅延迟 WebBrowser 实例是什么意思。如果您不希望 WebBrowser 做任何事情,那么不要告诉它做任何事情,或者在告诉它做某事之前等待。
标签: c# .net web-scraping