0

[コードの背景を説明するために 10/01/18 に編集。このバージョンは、使用される完全なコードを提示します]

AngleSharp を使用してフォームを送信するのに少し苦労しています。

AngleSharp を使用して、この Web サイトをプロキシアドレス用にスクラップします。基本的に、AngleSharp と IBrowsingContext (コード内のページ) を使用して Web サイトを開きます。

次に、Forms[0] を SubmitAsync して、プロキシの完全なリストを取得し (Web サイトのリンクを参照して、私の意味を理解してください)、そこにあるさまざまなプロキシを読み取ります [この部分はここには示されていません]。

その後、さまざまなページ内を移動したい場合 (通常、ページのフォーム1など、下部に移動バーがある約 60 ページ) はさらに複雑になりました。

Florian Rappl のアドバイスに従って、彼が示した例に基づいてリソースの読み込みをオンにしました (こちらを参照)。以下に投稿されたコードでは、リソースの読み込みループがメモリ使用量の急上昇で何かをダウンロードしているように見えるため、メモリ使用量についてコメントしました。比較のために、リソースをロードせずにメモリ使用量を提供しました。これは、コンソール アプリの完全に機能するコードです。

static void Main(string[] args)
    {
        ASTester().GetAwaiter().GetResult();
        Console.ReadKey();
    }

.

static async Task ASTester()
    {
        var Handler = new HttpClientHandler()
        {
            PreAuthenticate = true,
            UseDefaultCredentials = false,
        };

        var Client = new HttpClient(Handler);
        Client.DefaultRequestHeaders.TryAddWithoutValidation("User-Agent", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36");

        var Requester = new HttpClientRequester(Client);

        var Configuration = AngleSharp.Configuration.Default.WithDefaultLoader(setup =>
        {
            setup.IsResourceLoadingEnabled = true;
        }, requesters: new[] { Requester }).WithJavaScript().WithCss();
        var Page = BrowsingContext.New(Configuration);


        /*At this point : 
         *              Mem usage : ~15 MB
         */

        /*Open the page with the proxy list 
         *      with setup.IsResourceLoadingEnabled = true; 
         *              Mem usage : ~80 MB
         *      without
         *              Mem usage : ~35 MB
         */
        await Page.OpenAsync("http://www.gatherproxy.com/proxylist/anonymity/?t=Elite");

        /*Submit the first form (id = 0) which will activate the bar to navigate within the different pages
         *      with setup.IsResourceLoadingEnabled = true; 
         *              Mem usage : 300 MB
         *      without
         *              Mem usage : ~50 MB
         */
        await Page.Active.Forms[0].SubmitAsync();

        /*Activate the script to go to page 2
         *      with setup.IsResourceLoadingEnabled = true; 
         *              Mem usage : 1.5 GB
         *      without
         *              Mem usage : >> Exception
         */
        Page.Active.ExecuteScript("gp.pageClick(2);");

        //Giving time for the script to execute
        Thread.Sleep(40000);

    }

スクリプトの実行の半分の時間で例外がスローされます。残りの Page.Active 評価は'((AngleSharp.Dom.Document)((AngleSharp.BrowsingContext)Page).Active).ActiveElement' threw an exception of type 'System.NullReferenceException'

4

1 に答える 1