c# - Selenium,等待元素出现,但文本不可用
问题描述
在以下网站上:https ://hepa.hu/hirek 我正在等待这件作品的出现。这是 javascript 生成的,所以我开始在 C# 中使用 Selenium。我编写了以下代码,等待元素出现:
driver.Url = "https://hepa.hu/hirek";
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(20));
IWebElement firstResult = wait.Until(e => e.FindElement(By.XPath("//body/app-root/app-base/section/div/app-news/section/div[2]/div[4]/a[1]/app-news-card/div/div[2]/h3")));
(Xpath 是从节点本身复制的)代码有效,只要它真正等待元素出现,但是当我尝试访问里面的文本(firstResult.Text)时,它只给出“”,而不是里面的实际文字。 文本在 h3 标签内。我也一直在使用 HtmlAgilityPack,在那里,当我找到我需要的节点时,我可以使用 InnerHtml 标签访问里面的文本,但据我所知,Selenium 中没有这样的东西。
还有一点需要注意的是,当我查看驱动的PageSource属性时,可以看到里面有h3标签,也可以看到里面需要的文字。
有任何想法吗?提前致谢。
解决方案
我会加载页面,向下滚动 1000 像素,然后使用下面的 xpath。向下滚动后,该元素应该在那里。如果需要,请稍等。
你可以这样称呼它:
WaitForElemDisp_byXPath("//div[@class='news-cards']/a[1]//div[@class='news-card-text']/h3");
public static bool WaitForElemDisp_byXPath(string path)
{
var result = true;
try { _wait.Until(webDriver => webDriver.FindElement(By.XPath(path)).Displayed); }
catch (StaleElementReferenceException) { WaitForElementDisplayed_byXPath(path); }
catch (NoSuchElementException) { WaitForElementDisplayed_byXPath(path); }
catch (WebDriverTimeoutException) { result = false; }
return result;
}
这将为您提供 h3 的文本。
var test = driver.findelement(by.Xpath("//div[@class='news-cards']/a[1]//div[@class='news-card-text']/h3")).Text;
推荐阅读
- apache-spark - 从 Apache Spark 加载时以科学格式存储在 Hive 表中的小数
- android - Firebase 用户:isEmailVerified 返回 false
- python - 为什么气流没有运行最近的任务
- java - 致命错误:java.lang.NoClassDefFoundError: javafx/application/Application mvn client:build
- c# - Blazor [参数] 不更新输入变量
- reactjs - 在 react.js 中过滤/更新已经渲染的 chart.js
- python - 在哪里可以找到 python .difference() 源代码?
- typescript - 仅当不为空时才将变量从数字转换为字符串,否则保留为空
- php - 如何将变量从函数传递到 PHP / Laravel 中的条带化 webhook 函数?
- javascript - 使用ajax添加数据后dataTable的行消失