[コードの背景を説明するために 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'