首页 > 解决方案 > 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标签,也可以看到里面需要的文字。

有任何想法吗?提前致谢。

标签: c#seleniumweb-scraping

解决方案


我会加载页面,向下滚动 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;

推荐阅读