我在这个网站上使用 WatiN :http://www.mcmaster.com/#socket-head-cap-screws/=k5c5q8 我试图通过点击每个h3标签的类名来遍历每个页面。页面上没有href,我相信当单击h3时页面会使用javascript加载下一页。
到目前为止,这是我的代码:
types = doc.DocumentNode.SelectNodes("//h3[@class='AbbrPrsnttn_PrsnttnNm']");
foreach (HtmlNode type in types)
{
desc = type.InnerText.CleanText();
browser.div(Find.ById("ProdPrsnttnGrpCntnr")).Element(Find.ByClass("AbbrPrsnttn_PrsnttnNm")).Click();
System.Threading.Thread.Sleep(5000);
types = doc.DocumentNode.SelectNodes("//h3[@class='AbbrPrsnttn_PrsnttnNm']");
doc2.LoadHtml(browser.Html);
partTable = doc2.DocumentNode.SelectSingleNode("//div[@class='ItmTblGrp']");
MineNext(doc, doc2, browser, typeUrl, types, desc, partTable);
}
最重要的一行是
browser.div(Find.ById("ProdPrsnttnGrpCntnr")).Element(Find.ByClass("AbbrPrsnttn_PrsnttnNm")).Click();
当我运行此代码时,它会点击第一个类“AbbrPrsnttn_PrsnttnNm”但是一旦我迭代回到这个页面,它会再次尝试加载名为“Black-Oxide Alloy Steel”的相同元素。它会一遍又一遍地加载它,因为它不知道如何区分具有相同类名的其他H3。有没有办法做一个这些元素的集合,然后在集合中运行 foreach循环,然后使用 WatiN 单独点击每个元素?< / p>
答案 0 :(得分:1)
var h3s = browser.Div(Find.ById("ProdPrsnttnGrpCntnr")).ElementsWithTag("h3").ToArray();
for (int i = 1; i < h3s.Count(); i++)
{
h3s[i].Click();
System.Threading.Thread.Sleep(5000);
types = doc.DocumentNode.SelectNodes("//h3[@class='AbbrPrsnttn_PrsnttnNm']");
doc2.LoadHtml(browser.Html);
partTable = doc2.DocumentNode.SelectSingleNode("//div[@class='ItmTblGrp']");
MineNext(doc, doc2, browser, typeUrl, types, desc, partTable);
h3s = browser.Div(Find.ById("ProdPrsnttnGrpCntnr")).ElementsWithTag("h3").ToArray();
}