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