【问题标题】:How to get CSS Selector for text如何获取文本的 CSS 选择器
【发布时间】:2019-10-11 19:11:36
【问题描述】:

我正在尝试从网站上使用 Selenium (Python) 抓取一些日期。我想存储 rollover-s1 lastbookingrollover-s2 sr--x-times-last-time 类中的文本。

这是来自网站的代码:

<div data-component="onview-animate" data-anim-type="rollover" data-anim-trigger="mouseenter" class="sr--x-times-booked js_sr_persuation_msg">
    <div class="rollover-s1 lastbooking" rel="300">
3-mal gebucht für Ihre Daten in den letzten 12 Stunden auf unserer Seite
    </div>
    <div class="rollover-s2 sr--x-times-last-time" rel="300">
Zuletzt gebucht  für Ihre Daten vor 2 Stunden
    </div>
</div>

这是我的 Python 代码:

first = hotel.find_elements_by_css_selector("div.rollover-s1.lastbooking")
second = hotel.find_elements_by_css_selector("div.rollover-s2.sr--x-times-last-time")

奇怪的是,第一堂课我得到了文本 3-mal gebucht für Ihre Daten in den letzten 12 Stunden auf unserer Seite,但第二堂课我得到了一个空字符串“” .

你知道我第二课做错了什么吗?

【问题讨论】:

  • 您使用的是 find_elements 而不是 find_element。有什么理由吗?我可能怀疑第二个元素有多个元素,其中一个元素没有价值/文本
  • 嗨!进展如何?我的回答对你有帮助吗?谢谢。
  • 嗨 DebanjanB,很抱歉没有回复!是的,代码正在运行,非常感谢!

标签: python selenium xpath css-selectors webdriverwait


【解决方案1】:

所需的元素是 React 元素,因此要首先定位元素,您必须诱导 WebDriverWait 以使 元素可点击,您可以使用以下解决方案:

  • 使用CSS_SELECTOR

    print(WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.sr--x-times-booked.js_sr_persuation_msg[data-component='onview-animate'] div.rollover-s2.sr--x-times-last-time"))).get_attribute("innerHTML"))
    
  • 使用XPATH

    print(WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='sr--x-times-booked js_sr_persuation_msg' and @data-component='onview-animate']//div[@class='rollover-s2 sr--x-times-last-time']"))).get_attribute("innerHTML"))
    
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    

【讨论】:

    【解决方案2】:

    您的 css 选择器已经正确。事实上,你可以使用更短的:

    1. ".rollover-s1"
    2. ".rollover-s2"

    现在要弄清楚为什么第二个显示为空白,请观察正在运行的脚本,看看第二个翻转的处理方式是否与第一个不同。第一个当前显示而第二个隐藏?都隐藏了,但第二个从未在页面上触发/显示?

    【讨论】:

      猜你喜欢
      • 2016-08-24
      • 2016-10-18
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      • 2021-10-08
      • 1970-01-01
      • 2021-12-31
      • 2014-03-01
      相关资源
      最近更新 更多