我將用於AngleSharp和AngleSharp.Scripting.Javascript的nuget包導入空項目,以查看是否可以在應用javascript/css(如無頭瀏覽器)後從網頁解析html。使用AngleSharp加載資源文件
我使用http://pycoders.com/archive/(導航到在瀏覽器中使用javascript填充的新聞通訊檔案)作爲測試網址。
顯示內嵌javascript功能的基本示例腳本適用於我,而javascript在加載html後處理等......但加載實際網頁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
你使用什麼配置?你還使用最新版本的AngleSharp(v0.8.6)還是以前的版本? SSL可能是您的文件未加載的原因。由於AngleSharp是PCL,它只能提供有限選項的(糟糕的)'HttpWebRequest'。不幸的是,它不可能可靠地使用SSL和/或GZIP - 因此它只是一個具有有限能力的默認實現(總比沒有好)。 –
作爲補充說明:可以使用AngleSharp.Scripting.JavaScript軟件包,但是它目前是高度實驗性的,遠遠沒有準備好生產。我試圖在未來做得更好,但說實話,這是一項巨大的努力,項目缺乏貢獻者。因此,我不知道什麼時候可以將其稱爲生產準備。 –
嘿弗洛裏安感謝您的答覆。我使用的配置是:var config = Configuration.Default.WithJavaScript()。WithCss()。WithCookies()。With(new ASLoaderService(GetHttpRequesters()));這與github中的示例中的配置相同,除了我加載我自己實現的LoaderService,它主要是您的默認LoaderService的副本以用於調試 –