-1

数日間、私は WebBrowser ベースの webscraper に取り組んでいます。Threads および DocumentCompleted イベントを使用していくつかのプロトタイプを作成した後、単純で理解しやすい Webscraper を作成できるかどうか試してみることにしました。

目標は、実際の Thread オブジェクトを含まない Webscraper を作成することです。シーケンシャルなステップで動作するようにしたい (つまり、URL に移動する、アクションを実行する、他の URL に移動するなど)。

これは私がこれまでに得たものです:

public static class Webscraper
{
    private static WebBrowser _wb;
    public static string URL;

    //WebBrowser objects have to run in Single Thread Appartment for some reason.
    [STAThread] 
    public static void Init_Browser()
    { 
        _wb = new WebBrowser();
    }


    public static void Navigate_And_Wait(string url)
    {
        //Navigate to a specific url.
        _wb.Navigate(url);

        //Wait till the url is loaded.
        while (_wb.IsBusy) ;

        //Loop until current url == target url. (In case a website loads urls in steps)
        while (!_wb.Url.ToString().Contains(url))
        {
            //Wait till next url is loaded
            while (_wb.IsBusy) ;
        }

        //Place URL
        URL = _wb.Url.ToString();
    }
}

私は初心者のプログラマーですが、これはかなり単純なコードだと思います。そのため、何らかの理由でプログラムがこのコードで NullReferenceException をスローするという事実を嫌います。

 _wb.Url.ToString().Contains(url)

_wb.Navigate() メソッドを呼び出したので、NullReference を _wb オブジェクト自体に含めることはできません。したがって、私が想像できる唯一のことは、_wb.Url オブジェクトが null であることです。ただし、 while _wb.IsBusy() ループはそれを防ぐ必要があります。

では、何が起こっているのでしょうか。どうすれば修正できますか?

4

1 に答える 1