Html Agility Pack 如何在页面加载后获取动态生成的内容
Html Agility Pack how to get dynamically generated content after page loads
我正在尝试从“https://www.sideshow.com/collectibles?manufacturer=Hot+Toys”获取信息
特别是 Div c-ProductList 行 ss-targeted 但似乎没有检索到任何信息,任何线索
var test = page.DocumentNode.SelectNodes("//div[@class='c-ProductList row ss-targeted']");
您要获取的内容是在页面加载后生成的,使用Javascript和Ajax。 HAP 无法获取它,除非它在后台运行浏览器并执行页面上的脚本。
.Net Core 2.0
先决条件:您需要 Chrome 在您的 PC 上安装网络浏览器。
创建控制台应用程序
安装 Nuget 包
Install-Package HtmlAgilityPack
Install-Package Selenium.WebDriver
Install-Package Selenium.Chrome.WebDriver
将Main
方法替换为以下
代码:
static void Main(string[] args)
{
string url = "https://www.sideshow.com/collectibles?manufacturer=Hot+Toys";
var browser = new ChromeDriver(Environment.CurrentDirectory);
browser.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(30);
browser.Navigate().GoToUrl(url);
var results = browser.FindElementByClassName("ss-results");
var doc = new HtmlDocument();
doc.LoadHtml(results.GetAttribute("innerHTML"));
// Show results
var list = doc.DocumentNode.SelectSingleNode("//div[@class='c-ProductList row ss-targeted']");
foreach (var title in list.SelectNodes(".//h2[@class='c-ProductListItem__title ng-binding']"))
{
Console.WriteLine(title.InnerText);
}
Console.ReadLine();
}
.Net 4.6
创建控制台应用程序
安装 Nuget 包Install-Package HtmlAgilityPack
在 Solution Explorer 中添加对 System.Windows.Form
的引用
根据需要添加 using
语句
将Main
方法替换为以下
代码:
[STAThread]
static void Main(string[] args)
{
string url = "https://www.sideshow.com/collectibles?manufacturer=Hot+Toys";
var web = new HtmlWeb();
web.BrowserTimeout = TimeSpan.FromSeconds(30);
var doc = web.LoadFromBrowser(url, o =>
{
var webBrowser = (WebBrowser)o;
// Wait until the list shows up
return webBrowser.Document.Body.InnerHtml.Contains("c-ProductList");
});
// Show results
var list = doc.DocumentNode.SelectSingleNode("//div[@class='c-ProductList row ss-targeted']");
foreach (var title in list.SelectNodes(".//h2[@class='c-ProductListItem__title ng-binding']"))
{
Console.WriteLine(title.InnerText);
}
Console.ReadLine();
}
显示以以下开头的列表:
Iron Man Mark L
John Wick
The Punisher War Machine Armor
Wonder Woman Deluxe Version
我正在尝试从“https://www.sideshow.com/collectibles?manufacturer=Hot+Toys”获取信息 特别是 Div c-ProductList 行 ss-targeted 但似乎没有检索到任何信息,任何线索
var test = page.DocumentNode.SelectNodes("//div[@class='c-ProductList row ss-targeted']");
您要获取的内容是在页面加载后生成的,使用Javascript和Ajax。 HAP 无法获取它,除非它在后台运行浏览器并执行页面上的脚本。
.Net Core 2.0
先决条件:您需要 Chrome 在您的 PC 上安装网络浏览器。
创建控制台应用程序
安装 Nuget 包
Install-Package HtmlAgilityPack
Install-Package Selenium.WebDriver
Install-Package Selenium.Chrome.WebDriver
将
Main
方法替换为以下
代码:
static void Main(string[] args)
{
string url = "https://www.sideshow.com/collectibles?manufacturer=Hot+Toys";
var browser = new ChromeDriver(Environment.CurrentDirectory);
browser.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(30);
browser.Navigate().GoToUrl(url);
var results = browser.FindElementByClassName("ss-results");
var doc = new HtmlDocument();
doc.LoadHtml(results.GetAttribute("innerHTML"));
// Show results
var list = doc.DocumentNode.SelectSingleNode("//div[@class='c-ProductList row ss-targeted']");
foreach (var title in list.SelectNodes(".//h2[@class='c-ProductListItem__title ng-binding']"))
{
Console.WriteLine(title.InnerText);
}
Console.ReadLine();
}
.Net 4.6
创建控制台应用程序
安装 Nuget 包
Install-Package HtmlAgilityPack
在 Solution Explorer 中添加对
的引用System.Windows.Form
根据需要添加
using
语句将
Main
方法替换为以下
代码:
[STAThread]
static void Main(string[] args)
{
string url = "https://www.sideshow.com/collectibles?manufacturer=Hot+Toys";
var web = new HtmlWeb();
web.BrowserTimeout = TimeSpan.FromSeconds(30);
var doc = web.LoadFromBrowser(url, o =>
{
var webBrowser = (WebBrowser)o;
// Wait until the list shows up
return webBrowser.Document.Body.InnerHtml.Contains("c-ProductList");
});
// Show results
var list = doc.DocumentNode.SelectSingleNode("//div[@class='c-ProductList row ss-targeted']");
foreach (var title in list.SelectNodes(".//h2[@class='c-ProductListItem__title ng-binding']"))
{
Console.WriteLine(title.InnerText);
}
Console.ReadLine();
}
显示以以下开头的列表:
Iron Man Mark L
John Wick
The Punisher War Machine Armor
Wonder Woman Deluxe Version