我正在尝试从网站上抓取一些数据,当“$(document).ready”出现时填充数据表。
我的webBrowser ReadyState完成后,DIV元素中不存在数据。我认为这可能是因为虽然文档状态已完成,但可能需要几秒钟才能完成从客户端调用的JS加载数据。所以我尝试了一个计时器,一个while循环等待div填充内容,在IE8& 9模式下运行exe,并调用在页面加载完成时调用的相同JS方法。以上都没有给我我需要的数据。
有趣的是,如果我将MessageBox添加到我的代码中,在点击它之后,DIV就会拥有它的数据。这让我很生气,试图找出导致变化的原因。
static void Main(string[] args)
{
System.Threading.Thread t = new System.Threading.Thread(ThreadStart);
t.SetApartmentState(System.Threading.ApartmentState.STA);
t.Start();
Console.WriteLine("Downloading page...");
Console.ReadLine();
}
public static void ThreadStart()
{
WebBrowser wb = new WebBrowser();
wb.Navigate(url);
while (wb.ReadyState != WebBrowserReadyState.Complete)
Application.DoEvents();
wb.Document.InvokeScript("spotSystemPrice.load");
while (wb.ReadyState != WebBrowserReadyState.Complete)
Application.DoEvents();
string output1 = wb.Document.GetElementById(divname).InnerHtml;
MessageBox.Show("");
string output2 = wb.Document.GetElementById(divname).InnerHtml;
}
当运行output1为空时,output2具有我需要的数据。是什么导致MessageBox提示填充DIV?我确定这不仅仅是时间问题,因为我在readstate完成后尝试添加了许多不同的计时器间隔。