AngleSharp および AngleSharp.Scripting.Javascript の nuget パッケージを空のプロジェクトにインポートして、javascript/css を適用した後に Web ページから html を解析できるかどうかを確認しました (ヘッドレス ブラウザーのように)。
http://pycoders.com/archive/ (ブラウザーで JavaScript を使用して入力されたニュースレターのアーカイブに移動します) をテスト URL として使用しています。
インラインJavaScript機能を示す基本的なサンプルスクリプトは私にとっては機能し、JavaScriptはhtmlがロードされた後に処理されます...しかし、実際のWebページをvar document = await browseingContext.OpenAsync(new Url("http://pycoders.com/archive/"), CancellationToken.None);
ロードしても、外部ファイルリソースからロードされたスクリプト/ CSSは処理されません。
この問題をデバッグしようとした結果、IResourceLoader インターフェイスを、AngleSharp に含まれるデフォルトの ResourceLoader のコピーとして自分のプロジェクトに実装することになりました。ウェブサイトに対してファビコン リソース応答ストリームが返されるようですが、最初のスタイル リソース ファイル ( https:/ /s3.amazonaws.com/pycoders2/css/bootstrap.css ) は WebRequest によって ResponseStream にロードされません。
public async Task<IResponse> RequestAsync(CancellationToken cancellationToken)
{
...
_http.BeginGetResponse(ReceiveResponse, null);
await _completed.Task.ConfigureAwait(false);
if (cancellationToken.IsCancellationRequested)
return null;
return GetResponse();
}
上記の css リソース ファイルの場合、実行中のコードは行に到達します_http.BeginGetResponse(ReceiveResponse, null);
が、RecieveResponse
メソッドは呼び出されません。
誰かがAngleSharpでリソースをロードするのを手伝ってくれることを願っています.AngleSharpは下降したhtmlパーサーのように見えます.javascript/cssの前処理はそれをうまく締めくくり、phantomjsとSeleniumの必要性を取り除きます.
編集:
HTML がレンダリングされるときに現在実行中のリソース タスクの詳細は次のとおりです。
https://s3.amazonaws.com/pycoders2/img/favicon.ico - RanToCompletion
https://s3.amazonaws.com/pycoders2/img/favicon.ico - RanToCompletion
https://s3.amazonaws.com/pycoders2/css/bootstrap.css - WaitingForActivation
https://s3.amazonaws.com/pycoders2/css/main.css - WaitingForActivation
http://fonts.googleapis.com/css?family=Lato:300,400,900 - RanToCompletion
https://s3.amazonaws.com/pycoders2/img/header.png - WaitingForActivation
http://us4.campaign-archive1.com/generate-js/?u=9735795484d2e4c204da82a29&fid=1817&show=200 - RanToCompletion
https://code.jquery.com/jquery-1.10.2.min.js - RanToCompletion
https://s3.amazonaws.com/pycoders2/js/bootstrap.min.js - WaitingForActivation