硒,正在等待元素出现,但文本不可用

时间:2020-09-07 20:43:35

标签: c# selenium web-scraping

在以下网站上:https://hepa.hu/hirek I'm waiting for this piece to appear。 这是由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)时,它只是给出“”,而不是其中的实际文本。 The text is inside the h3 tags。我也一直在使用HtmlAgilityPack,在那里,当我找到所需的节点时,可以使用InnerHtml标签访问内部的文本,但据我所知,Selenium中没有这样的东西。

要注意的另一件事,当我检查驱动程序的PageSource属性时,我可以看到内部的h3标签,并且还可以看到内部所需的文本。

有什么想法吗?预先感谢。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

好的,所以我找到了一种非常简单的解决方法。从我要获取的文本开始的几个节点是一个标签,带有指向文章的href链接,该文章显然也包含我需要的文本。所以我所做的就是找到节点,获取href属性,转到该站点,找到了我需要的标签,并且由于某种原因,getText()可以正常工作。 不过,由于原始问题仍然存在,我不想关闭此线程,如何从原始节点获取文本?我对为什么它不起作用很感兴趣。