如何使用Selenium [Python]从span中选择以下文本?

时间:2018-06-15 17:51:40

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

以下是结构:

    <div class="col-sm-12 text-center marginTopMini infoMessage showInfo" ng-class="{ showInfo : servicesCtrl.texts.addressInfo != '' &amp;&amp; servicesCtrl.show.receipt === false }">
  <div class="infoMessageInner">
    <p>
      <span ng-bind-html="servicesCtrl.texts.addressInfo" class="ng-binding">
        Tyvärr kan vi inte erbjuda fiber eller tjänster på denna adress just nu. Vänligen kontrollera att adressen är rättstavad och enligt formatet <b>”Exempelgatan 17A, Ort”</b>.
        <br><br>Vi vill ge alla möjlighet till fiberanslutning. Gör en intresseanmälan för din adress så ökar chansen att vi kommer kunna erbjuda fiber även i ditt område.
      </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=""> 
          <a ng-click="servicesCtrl.preScrollToVerticalPosition('checkout', 'checkout', '/inquiry', undefined, 'Inquiry')">Till&nbsp;intresseanmälan</a>
        </span>
      </p>
    </div>
  </div>

如何使用selenium ** [Python] **选择以下段落文本。我试过这个方法请看一下(使用python):

driver.find_elements_by_css_selector(".showInfo.infoMessageInner")
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'.showInfo.infoMessageInner')))
data = driver.find_elements_by_css_selector(".showInfo.infoMessageInner")

请建议我有效的解决方案,如何检索以上段落标记(p)中的以下文本。感谢

3 个答案:

答案 0 :(得分:1)

您的定位器有点偏离......

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

答案 1 :(得分:1)

你快到了。您只需要标识<p>标记并诱导 WebDriverWait 以使元素可见,最后使用text检索文本,如下所示:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
#other lines of code
element = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.infoMessageInner > p")))
print(element.text)

提取的文字将是:

Tyvärr kan vi inte erbjuda fiber eller tjänster på denna adress just nu. Vänligen kontrollera att adressen är rättstavad och enligt formatet ”Exempelgatan 17A, Ort”.
        Vi vill ge alla möjlighet till fiberanslutning. Gör en intresseanmälan för din adress så ökar chansen att vi kommer kunna erbjuda fiber även i ditt område.



          Till fiberbeställningen


          Till intresseanmälan

答案 2 :(得分:0)

您需要向下钻取更多内容,然后获取文本或innerHTML,例如:

text = driver.find_element_by_css_selector("div[@class='infoMessageInner'] span.ng-binding")).get_text()

我没有验证这段代码,但它应该让你走上正轨。