C# Selenium找不到元素

C# Selenium找不到元素,c#,selenium,C#,Selenium,我正在使用Selenium从站点下载一些数据,特别是这是 如您所见,有两个选项卡: 全职 上半场 我试图通过模拟通过Selenium点击内容来访问上半部分的内容,这是我的代码: var chromeOpts = new ChromeOptions(); chromeOpts.AddArguments("headless"); var chromeDriverService = ChromeDriverService.CreateDefaultService(); driver = new

我正在使用
Selenium
从站点下载一些数据,特别是这是

如您所见,有两个选项卡:

  • 全职
  • 上半场

我试图通过模拟通过
Selenium
点击内容来访问
上半部分的内容,这是我的代码:

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/usa/mls/chicago-fire-new-york-city-CAl0LCJs/?r=1#ah;2"));
driver.FindElement(By.XPath("//*[contains(text(),'1st') and contains(text(),'Half')]")).Click();
string html = driver.PageSource;
问题是我遇到了以下错误:

OpenQA.Selenium.ElementNotVisibleException:'元素不可见

我认为我的
XPath
是错误的,但我尝试了其他选项卡和工作,而且
html
结构也是正确的


发生了什么事?

它应该可以在我的机器上正常工作。也许页面加载在您的机器上花费时间。可以使用预期条件等待检查图元的可见性。确保您已经安装了两个Selenium。Webdriver和Selenium。支持项目的NuGet软件包。你需要硒。支持包使用ExpectedConditions

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(60));
IWebElement element = wait.Until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[contains(text(),'1st') and contains(text(),'Half')]")));
element.Click();

有两个元素使用相同的xpath,第一个元素不可见。在代码中,您使用了
FindElement
方法,因此它正在查找返回错误的不可见元素

解决方案: 您可以通过两种方式执行单击操作

选项1:

将Xpath更改为
/*[contains(text(),'1st')和contains(text(),'Half')][1]

driver.FindElement(By.XPath("//*[contains(text(),'1st') and contains(text(),'Half')][1]")).Click();
选项2:

使用
FindElements
方法查找所有匹配的元素,然后仅在特定元素禁用时执行单击操作

var halfElementList = driver.FindElements(By.XPath("//*[contains(text(),'1st') and contains(text(),'Half')]"));

string html = "";
foreach(var element in halfElementList)
{
    if (element.Displayed)
    {
        element.Click();
        html = driver.PageSource;
    }
}

您拥有唯一的ID
bettype tabs scope
,并且有
ul
和3个
li
元素。

  • 全职

你能链接到该网站,让我看看它吗?你有没有尝试增加睡眠计时器?在你继续搜索该元素之前,请完全确保页面确实已完全加载?它不会抛出任何此类错误,它工作得非常好。您甚至不需要在单击该选项卡之前进行隐式等待,因为即使在页面完全加载之前,所需元素也已完全准备就绪。@SebastianNielsen url已经存在问题,我试图增加等待时间并解决同样的问题。@Rajagopalan抱歉,但我不明白,我的代码对我不起作用,每次我发布一个与硒相关的
Selenium
问题时,你都说对于你的工作来说,这对我帮助不大,怎么可能我的代码对我不起作用而对你起作用呢?不幸的是,我遇到了同样的问题,上面的解决方案对我都不起作用,奇怪的是,只有当我尝试单击主选项卡(在问题中指定)的
1st-Half
时,才会出现此问题哦。这两种选择对我都非常有效。您得到的是什么错误?