【问题标题】:htmlagilityPack: Web page doesn't return complete htmlhtmlagilityPack:网页不返回完整的 html
【发布时间】:2023-03-19 16:15:01
【问题描述】:

使用 htmlagilityPack 尝试获取所有 href 链接。但网页不会返回所有链接。

我在浏览器中尝试过,发现直到您向下滚动整个页面,它才会显示所有链接。然后我尝试调整(放大)浏览器窗口的大小,以便无需向下滚动即可看到所有页面内容。那一刻所有的链接都出现了。可能是java需要触发....

HtmlWeb web = new HtmlWeb();
HtmlAgilityPack.HtmlDocument Doc = web.Load("https://www.verkkokauppa.com/fi/catalog/438b/Televisiot/products?page=1");

foreach (HtmlNode item in Doc.DocumentNode.SelectNodes("//li[@class='product-list-grid__grid-item']/a"))

{                                                                               
 debug.WriteLine(item.GetAttributeValue("href", string.Empty));                      
}

一个页面有 24 个产品链接,但我只得到了 15 个。

【问题讨论】:

    标签: c# html-agility-pack


    【解决方案1】:

    在该页面上检查 chrome 中的网络选项卡。 https://www.verkkokauppa.com/resp-api/product?pids=467610 有 ajax 请求。所以产品是使用 javascript 加载的。

    您不能只在此处触发 javascript。 HtmlAgilityPack 是一个 html 解析器。如果您想使用动态内容,您需要浏览器引擎。我认为你应该检查Seleniumphantomjs

    【讨论】:

    • 谢谢,如何查看此产品系列的 API。
    • 您可以从答案中查看介绍视频的链接
    • 或者你可以尝试直接使用站点API,我的意思是从resp-api端点获取JSON
    • 我可以使用 JSON 但如何获取 API,意味着如何获取所有 pid?
    • 没有明确的方法。要直接使用 api,您需要找到一种获取这些 pid 的方法。最直接的方法是使用selenium\phantomjs
    猜你喜欢
    • 1970-01-01
    • 2017-06-02
    • 2021-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-24
    • 2019-03-12
    • 1970-01-01
    相关资源
    最近更新 更多