C# Best Buy Web Scraping - 无法添加到购物车元素

C# Best Buy Web Scraping - Can't get add to cart element

我正在编写一个简单的网络抓取应用程序来检索有关某些 PC 组件的信息。

我使用 Best Buy 作为我的测试网站,我使用 HTMLAgilityPack 作为我的抓取工具。

我可以检索标题和价格;但是,我似乎无法获得可用性。

所以,我正在尝试阅读“添加到购物车”按钮元素的文本。如果有货,它会显示为“添加到购物车”,否则,它会显示为“不可用”。

但是,当我获取 XPath 并尝试将其保存到变量时,它 returns 为空。有人可以帮我吗?

这是我的代码。

var url = "https://www.bestbuy.com/site/pny-nvidia-geforce-gt-710-verto-2gb-ddr3-pci-express-2-0-graphics-card-black/5092306.p?skuId=5092306";
HtmlWeb web = new HtmlWeb();
HtmlDocument pageDocument = web.Load(url);

string titleXPath = "/html/body/div[3]/main/div[2]/div[3]/div[1]/div[1]/div/div/div[1]/h1";
string priceXPath = "/html/body/div[3]/main/div[2]/div[3]/div[2]/div/div/div[1]/div/div/div/div/div[2]/div/div/div/span[1]";
string availabilityXPath = "/html/body/div[3]/main/div[2]/div[3]/div[2]/div/div/div[7]/div[1]/div/div/div[1]/button";

var title = pageDocument.DocumentNode.SelectSingleNode(titleXPath);
var price = pageDocument.DocumentNode.SelectSingleNode(priceXPath);
bool availability = pageDocument.DocumentNode.SelectSingleNode(availabilityXPath) != null ? true : false;

Console.WriteLine(title.InnerText);
Console.WriteLine(price.InnerText);
Console.WriteLine(availability);

它正确输出标题和价格,但可用性始终为空。

尝试string availabilityXPath = "//button[. = 'Add to Cart']"

在网络抓取中,虽然生成的长 xpath 始终适用于同一个静态页面,但当您处理同一商店的多个页面时,某些元素的位置可能会漂移并破坏您的 xpath。你的 /html/body/div[3]/main/div[2]/div[3]/div[2]/div/div/div[7]/div[1]/div 坏了,我怀疑这就是这里发生的事情。

学习从头开始编写一个程序将是无价的(并且更容易调试!)。