通过在WatiN中按类单击元素集合进行解析

时间:2012-11-13 22:08:54

标签: c# xpath foreach watin

我在这个网站上使用 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>

1 个答案:

答案 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();
                    }