AngleSharp IHtmlDocument 在哪里公开文档的 Uri?
Where does AngleSharp IHtmlDocument exposes the doc's Uri?
AngleSharp 在何处公开已解析文档的 Uri?
考虑以下片段:
HttpClient httpClient = new HttpClient();
string htmlString = httpClient.GetStringAsync("http://www.whosebug.com").Result;
HtmlParser htmlParser = new HtmlParser();
var parsedHtml = htmlParser.Parse(htmlString);
Console.WriteLine(parsedHtml.Url);
Console.WriteLine(parsedHtml.DocumentUri);
它将打印 about:blank
两次。
文档已解析,我可以访问标题等属性,但找不到对其 uri 的引用。
有人成功做到了吗?
粗略搜索 AngleSharp for "DocumentUri" results with this:
[Test]
public async Task LoadFromStringAndLoadFromUrlShouldResultInSameDom()
{
if (Helper.IsNetworkAvailable())
{
var config = new Configuration().WithDefaultLoader();
var url = "http://imama.shop.by/kolyaski/detskaya_kolyaska_tutis_zippy_2_v_1_cvet_12_shokoladnyy223222222/";
var client = new HttpClient();
var message = new HttpRequestMessage(HttpMethod.Get, url);
var response = await client.SendAsync(message);
var html = await response.Content.ReadAsStringAsync();
var documentStr = await BrowsingContext.New(config).OpenAsync(m => m.Content(html));
var titleStr = documentStr.Title;
var documentUri = await BrowsingContext.New(config).OpenAsync(url);
var titleUri = documentUri.Title;
Assert.AreEqual(titleUri, titleStr);
}
}
在您的代码中,唯一传递给 AngleSharp
的是包含 HTML 的字符串。如果您考虑一下,AngleSharp
无法知道您从何处获取字符串(它可以来自 URL、文件或硬编码为 C# 字符串文字)。
要使 DocumentUri
正常工作,您需要找到一种方法从 URL 加载文档到 "AngleSharp way",可能使用 BrowsingContext
。以下代码为我正确打印了 URL :
static void Main(string[] args)
{
var config = Configuration.Default.WithDefaultLoader();
var task = BrowsingContext.New(config).OpenAsync("http://www.whosebug.com");
var parsedHtml = task.Result;
Console.WriteLine(parsedHtml.DocumentUri);
}
AngleSharp 在何处公开已解析文档的 Uri?
考虑以下片段:
HttpClient httpClient = new HttpClient();
string htmlString = httpClient.GetStringAsync("http://www.whosebug.com").Result;
HtmlParser htmlParser = new HtmlParser();
var parsedHtml = htmlParser.Parse(htmlString);
Console.WriteLine(parsedHtml.Url);
Console.WriteLine(parsedHtml.DocumentUri);
它将打印 about:blank
两次。
文档已解析,我可以访问标题等属性,但找不到对其 uri 的引用。
有人成功做到了吗?
粗略搜索 AngleSharp for "DocumentUri" results with this:
[Test]
public async Task LoadFromStringAndLoadFromUrlShouldResultInSameDom()
{
if (Helper.IsNetworkAvailable())
{
var config = new Configuration().WithDefaultLoader();
var url = "http://imama.shop.by/kolyaski/detskaya_kolyaska_tutis_zippy_2_v_1_cvet_12_shokoladnyy223222222/";
var client = new HttpClient();
var message = new HttpRequestMessage(HttpMethod.Get, url);
var response = await client.SendAsync(message);
var html = await response.Content.ReadAsStringAsync();
var documentStr = await BrowsingContext.New(config).OpenAsync(m => m.Content(html));
var titleStr = documentStr.Title;
var documentUri = await BrowsingContext.New(config).OpenAsync(url);
var titleUri = documentUri.Title;
Assert.AreEqual(titleUri, titleStr);
}
}
在您的代码中,唯一传递给 AngleSharp
的是包含 HTML 的字符串。如果您考虑一下,AngleSharp
无法知道您从何处获取字符串(它可以来自 URL、文件或硬编码为 C# 字符串文字)。
要使 DocumentUri
正常工作,您需要找到一种方法从 URL 加载文档到 "AngleSharp way",可能使用 BrowsingContext
。以下代码为我正确打印了 URL :
static void Main(string[] args)
{
var config = Configuration.Default.WithDefaultLoader();
var task = BrowsingContext.New(config).OpenAsync("http://www.whosebug.com");
var parsedHtml = task.Result;
Console.WriteLine(parsedHtml.DocumentUri);
}