【问题标题】:Selenium, waiting for element to appear, but text isn't availableSelenium,等待元素出现,但文本不可用
【发布时间】:2020-09-07 20:43:35
【问题描述】:

在以下网站上: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标签,里面也可以看到需要的文字。

有什么想法吗?提前致谢。

【问题讨论】:

    标签: c# selenium web-scraping


    【解决方案1】:

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

    【讨论】:

    • 这段代码也找到了节点,但由于某种原因它仍然没有给我里面的文本:(
    【解决方案2】:

    好的,所以我找到了一个非常迂回的方法来解决这个问题。我想要获取的文本上方的几个节点是一个标签,带有指向文章的 href 链接,显然也有我需要的文本。所以我所做的是,我找到了节点,获取了 href 属性,访问了那个站点,找到了我需要的标签,并且由于某种原因,getText() 在那里工作。 不过,我不想关闭这个线程,因为原始问题仍然存在,我怎样才能从原始节点获取文本?我对它为什么不起作用很感兴趣。

    【讨论】:

    • 我刚刚运行了一个简单的测试,该代码返回了预期的文本。你的代码是什么样的?当你通过调试运行它时它工作吗?
    • ![这就是我调用我的函数的方式,这和你在第一条评论中写的非常相似。][imgur.com/UDU62TH] ![这就是代码的样子,][ imgur.com/tw7HxX8] 所以我给网站,给XPath,函数返回节点的Text。但是,它不适用于此站点(对我而言)。
    • 嗯,老实说,这对我来说确实不起作用。但是,我现在尝试了它,它可以工作。好笑。好吧,感谢您的帮助,我真的不知道为什么我有一段时间无法获取文本,以及为什么我现在可以获取它。
    • 很高兴它成功了。请确保您接受答案。
    猜你喜欢
    • 2020-02-23
    • 1970-01-01
    • 2019-11-02
    • 1970-01-01
    • 1970-01-01
    • 2016-05-09
    • 1970-01-01
    • 2018-08-09
    • 1970-01-01
    相关资源
    最近更新 更多