无法在特定的html元素中获取标签

时间:2018-08-01 18:21:22

标签: c# selenium

我正在尝试获取this site的标签ul中可用的链接列表。 我尝试获取的链接位于More bets内部,具体是:

enter image description here

所有这些链接都位于一个ID为ul的div中,正如我之前所说的那样,位于bettype-tabs标记中。

我写了这段代码:

var chromeOpts = new ChromeOptions();
chromeOpts.AddArguments("headless");
var chromeDriverService = ChromeDriverService.CreateDefaultService();
driver = new ChromeDriver(chromeDriverService, chromeOpts);
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10);            
driver.Navigate().GoToUrl(new Uri("http://www.oddsportal.com/soccer/mexico/copa-mexico/cafetaleros-de-tapachula-atletico-san-luis-fcfIQtLo/?r=1#ah;2"));
var listItems = driver.FindElement(By.Id("bettype-tabs"))?.FindElements(By.TagName("li"));

foreach(var c in listItems)
{
   Console.WriteLine(c.Text);
}

listItems.Where(li => li.Text == "HT/FT" || li.Text == "Half Time / Full Time").Single().Click();

现在最后一行将返回:

  

序列不包含任何元素

foreach印刷品上显示事实

enter image description here

那么More bets内的链接为什么不在列表中?

如何处理这种情况?

2 个答案:

答案 0 :(得分:2)

请尝试以下操作以获取“更多投注”下的链接:

var listItems =   driver.FindElement(By.Id("bettype-tabs"))?.FindElements(By.TagName("p"))?.FindElements(By.TagName("a"));

    foreach(var c in listItems)
    {
       Console.WriteLine(c.GetAttribute("innerHTML"));
    }

答案 1 :(得分:1)

而不是:

var listItems = driver.FindElement(By.Id("bettype-tabs"))?.FindElements(By.TagName("li"));  

使用此:

var listItems = driver.FindElement(By.CssSelector("div#bettype-tabs li"));  

并像完成它一样循环。

,如果您想单击任何特定元素,则:

foreach(var c in listItems)
{
  if(c.Text.Trim().Contains("DC")){
     c.Click()
 }
}