【问题标题】:How to extract data from the following html?如何从以下html中提取数据?
【发布时间】:2018-11-27 03:17:09
【问题描述】:

我要从中提取数据的 Html 是:

  <div class="infoMessageInner">
    <p>
      <span ng-bind-html="servicesCtrl.texts.addressInfo" class="ng-binding">
        Fiber är beställd till adressen. Tjänsterna kan du beställa när installationen är färdig.
      </span>
      <span ng-show="servicesCtrl.address.status === 'Orderable'" class="ng-hide">
        <a ng-click="servicesCtrl.preScrollToVerticalPosition('checkout', 'checkout', '/checkoutFiber', undefined, 'Checkout fiber')">Till&nbsp;fiberbeställningen
        </a>
      </span>
      <span ng-show="servicesCtrl.address.status === 'Inquireable'" class="ng-hide">
        <a ng-click="servicesCtrl.preScrollToVerticalPosition('checkout', 'checkout', '/inquiry', undefined, 'Inquiry')">Till&nbsp;intresseanmälan</a>
      </span>
    </p>
  </div>

**我只想从第一个跨度中提取数据。到目前为止,我已经发布并获得了解决方案,但问题仍然存在,我得到了 selenium web 元素的空列表。 **

代码 sn-p 是:(使用 Python-Selenium)

driver.find_elements_by_css_selector('div.infoMessageInner > p')
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, 'div.infoMessageInner > p')))
data = driver.find_elements_by_css_selector('div.infoMessageInner > p')

请帮助并抱歉发布这样的问题,因为我正在学习硒。

【问题讨论】:

    标签: python-3.x selenium xpath css-selectors webdriverwait


    【解决方案1】:

    提取文本Fiber är beställd until adressen。 Tjänsterna kan du beställa när installationen är färdig. 仅从第一个跨度开始,您只需诱导 WebDriverWait 以使 文本出现在元素中,您可以使用以下解决方案:

    • 进口:

      from selenium.webdriver.support.ui import WebDriverWait
      from selenium.webdriver.common.by import By
      from selenium.webdriver.support import expected_conditions as EC
      
    • 代码行:

      #Option 1 - text_to_be_present_in_element and CSS_SELECTOR
      element = WebDriverWait(driver, 20).until(EC.text_to_be_present_in_element((By.CSS_SELECTOR, "div.infoMessageInner>p>span.ng-binding"), "Fiber är beställd till adressen"))
      #Option 2 - text_to_be_present_in_element_value and CSS_SELECTOR
      element = WebDriverWait(driver, 20).until(EC.text_to_be_present_in_element_value((By.CSS_SELECTOR, "div.infoMessageInner>p>span.ng-binding"), "Fiber är beställd till adressen"))
      #Option 3 - text_to_be_present_in_element and XPATH
      element = WebDriverWait(driver, 20).until(EC.text_to_be_present_in_element((By.XPATH, "//div[@class='infoMessageInner']/p/span[@class='ng-binding']"), "Fiber är beställd till adressen"))
      #Option 4 - text_to_be_present_in_element_value and XPATH
      element = WebDriverWait(driver, 20).until(EC.text_to_be_present_in_element_value((By.XPATH, "//div[@class='infoMessageInner']/p/span[@class='ng-binding']"), "Fiber är beställd till adressen"))
      
    • 文本将是:

      Fiber är beställd till adressen. Tjänsterna kan du beställa när installationen är färdig.
      

    【讨论】:

    • IDE 将错误标记为:''expected_condition''。为什么?
    • 从以前的导入它现在可以工作但有时会给出空结果......尽管文本在跨度中可用。并感谢您第二次提供帮助。
    • 我在我的代码中使用了您建议的先前代码的 css 选择器(您已发布),它开始工作了。
    • 先生,它的超时异常
    【解决方案2】:

    如果您的 html 中没有更多的 &lt;span&gt; 元素,您可以找到第一个带有 driver.find_element_by_tag_name('span').text 的 span 元素

    【讨论】:

    • 哦..但是还有其他不同的跨度存在
    • 这样您就可以在 div 中找到所有带有“infoMessageInner”类的跨度:driver.find_element_by_class_name('infoMessageInner').find_element_by_tag_name('span').text
    • 是的,这对我来说是新事物,让我试试吧。
    【解决方案3】:

    您可以在 CSS 选择器中使用以下绑定

    .ng-binding
    

    编辑:

    driver.find_element_by_css_selector('.ng-binding').text
    

    【讨论】:

    • 你在这个css选择器后面用过.text吗?
    • 是的,先生,我试过了,我认为它是在说超时,因为没有找到元素超时异常发生
    猜你喜欢
    • 2020-09-30
    • 2018-05-26
    • 2017-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-15
    • 2019-05-24
    相关资源
    最近更新 更多