如何使用Selenium WebDriver获取指定class的div元素值?
解决Selenium获取"21:45"文本的问题
1. 修正基础代码错误
你之前用FindElements(复数方法)获取的是元素列表,无法直接在列表上调用FindElement。先调整为获取单个父元素,再定位子元素:
// 定位单个date-time-container容器 var dateContainer = driver.FindElement(By.CssSelector("div.date-time-container")); // 获取start-time元素的文本 string start24 = dateContainer.FindElement(By.CssSelector("div.start-time")).Text;
2. 直接定位目标元素(更简洁)
无需先找父容器,直接定位start-time元素:
string start24 = driver.FindElement(By.CssSelector("div.start-time")).Text;
3. 处理元素未加载或Text获取失败的情况
如果仍返回空值,大概率是元素未完全渲染,需添加显式等待:
using OpenQA.Selenium.Support.UI; // 等待start-time元素可见,最长等待10秒 var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); var startTimeElement = wait.Until(d => d.FindElement(By.CssSelector("div.start-time"))); string start24 = startTimeElement.Text;
若Text属性依旧为空,可尝试获取原生DOM属性:
string start24 = startTimeElement.GetAttribute("textContent").Trim(); // 或替换为innerText string start24 = startTimeElement.GetAttribute("innerText").Trim();
4. XPath替代方案
如果CSS选择器效果不佳,可改用XPath定位:
// 直接定位start-time元素 string start24 = driver.FindElement(By.XPath("//div[@class='start-time']")).Text; // 精准路径定位 string start24 = driver.FindElement(By.XPath("//div[@class='date-time-container']//div[@class='start-time']")).Text;
内容的提问来源于stack exchange,提问作者Pietro Favuzza
相关产品推荐
相关产品推荐

