我将 AngleSharp 和 AngleSharp.Scripting.Javascript 的 nuget 包导入到一个空项目中,以查看在应用 javascript/css 后是否可以从网页中解析 html(如无头浏览器)。
我正在使用http://pycoders.com/archive/(它导航到使用浏览器中的 javascript 填充的时事通讯存档)作为测试 url。
显示内联 javascript 功能的基本示例脚本对我有用,并且在加载 html 后处理 javascript 等......但加载实际网页并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 中加载资源,因为它看起来像是一个下降的 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