【问题标题】:Locate text which loads dynamically Python Selenium WebDriver找到动态加载的文本 Python Selenium WebDriver
【发布时间】:2018-10-16 13:48:18
【问题描述】:

我的问题是我试图获取元素的文本,它动态地填充了 HTML 内容。这是HTML源代码。最后一个div:

<div data-bind="with: dataForRatingPopup"></div>

鼠标进入第一个div时用HTML代码填充:

<div class="star-rating-wrap" data-bind="event: { mouseenter: mouseEnter, mouseleave: mouseLeave, click: click }, css: { 'has-supplier': emex.context.userIsInOptovikInterface }">
    <div class="star-rating rating-6" data-bind="css: css"></div>
    <div data-bind="with: dataForRatingPopup"></div>
</div>

如何使用 Selenium WebDriver 获取此元素的文本?

【问题讨论】:

  • 看起来 html 代码中没有文本,您在寻找任何属性吗?
  • XPATH 使用 data-bind="with: dataForRatingPopup" 搜索 DIV
  • 你是怎么尝试的?你的代码在哪里?
  • 欢迎来到 Stack Overflow!请参阅:How do I do X? SO 的期望是,提出问题的用户不仅会进行研究以回答他们自己的问题,还会分享该研究、代码尝试和结果。这表明您已经花时间尝试帮助自己,它使我们免于重复明显的答案,最重要的是它可以帮助您获得更具体和相关的答案!另见:How to Ask

标签: python html python-3.x selenium selenium-webdriver


【解决方案1】:

您可以为此使用 webdriverwait 功能

from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

WebDriverWait(driver, 100).until(
            EC.text_to_be_present_in_element((By.XPATH, '//div[contains(@data-bind, "dataForRatingPopup")]'), "txt you want to match")
        )

上面的代码将等待最多 100 秒来查找包含文本“txt you want to match”的 div(其@data-bind 属性包含值“dataForRatingPopup”)

有用的链接: https://christopher.su/2015/selenium-chromedriver-ubuntu/(你可以跳过pyvirtualdisplay的使用)

http://selenium-python.readthedocs.io/getting-started.html#simple-usage

【讨论】:

  • 我不明白这个答案与这个问题有什么关系。
  • @JeffC 在使用 requests 模块进行抓取期间,您只能获取静态内容(不是通过 JS 加载的内容,如 Angular 基础站点中的),为此,您必须将 selenium 与任何 Web 驱动程序(Firfox, chrome 或 phantomJS)。以上代码 sn-p 用于在页面加载后等待元素。
  • 提供的 HTML 中没有 A 标记,更不用说包含文本“查看所有声明”的任何标记......所以我仍然不明白这个答案与这个有什么关系问题。
  • OP 正在尝试从指定的 DIV...get 文本...而不是根据包含的文本搜索 DIV。这仍然不适用
  • @JeffC 将我的答案更新为更具体的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-16
  • 1970-01-01
  • 2014-12-21
相关资源
最近更新 更多