C#webBrowser类。使用$(document).ready javascript调用进行Web Scraping

时间:2014-04-21 19:06:27

标签: c# javascript html web-scraping webbrowser-control

我正在尝试从网站上抓取一些数据,当“$(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完成后尝试添加了许多不同的计时器间隔。

0 个答案:

没有答案