【问题标题】:Python Selenium find_element_by_xpathPython Selenium find_element_by_xpath
【发布时间】:2019-09-28 07:26:57
【问题描述】:

我想从以下代码中提取文本“3351500920037”:

<div class="specs">
    <h3 class="h4">Productinformatie</h3>
    <dl class="specs__list">

        <dt class="specs__title">
        Gewicht

      </dt>
        <dd class="specs__value">

            0,3 kg

        </dd>

        <dt class="specs__title">
        EAN

      </dt>
        <dd class="specs__value">

            3351500920037

        </dd>

    </dl>
</div>

我用

ref_code = driver.find_element_by_xpath('//*[contains(text(),"EAN")]/following-sibling::dd').text

当我打印 ref_code 时,似乎只占用了文本的第一行。它显示为空。

我有什么:

print(ref_code)

我想要:

print(ref_code)
3351500920037

如何获取包括下一行在内的整个文本?

【问题讨论】:

  • 添加打印结果ref_code 和您的期望。请以文本格式添加 HTML。
  • 除非您这样做,否则没有朋友会为您从图像中编写 html 结构。请在帖子中添加html结构作为代码,以便人们可以重现问题
  • 很抱歉。我刚刚编辑了没有图像的问题。谢谢

标签: python-3.x selenium xpath text selenium-chromedriver


【解决方案1】:

这里是如何从第一个搜索页面获取所有 EAN 号码的代码。您可以通过先浏览所有页面来收集所有链接来改进代码:

import selenium, csv, sys, time
from oauth2client.service_account import ServiceAccountCredentials
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome.options import Options

driver = webdriver.Chrome('/usr/local/bin/chromedriver')
wait = WebDriverWait(driver, 20)

query = "Azzaro Chrome 100 ml"
driver.get("https://www.bol.com")

driver.find_element_by_id("searchfor").send_keys(query, u'\ue007')

# wait presence and get all product A elements
products = wait.until(ec.presence_of_all_elements_located((By.CSS_SELECTOR, "li.product-item--row a.product-title")))
# get HREF attribute from products
product_links = [product.get_attribute("href") for product in products]

# iterate through and open all product links, and get ref_code
for link in product_links:
    driver.get(link)
    ref_code = driver.find_element_by_css_selector("a[data-ean]").get_attribute("data-ean")
    print(ref_code)

【讨论】:

  • 谢谢,但我只需要在 Python 中使用它
  • 除非我弄错了,我遇到了与初始代码相同的问题,我收到以下错误:AttributeError: 'visibility_of_element_located' object has no attribute 'text'
  • 您只需要打开浏览器并导航到 URL,然后只需复制我的代码,无需您进行任何修改。如果您仍然会收到错误,请使用您的完整代码更新您的问题
  • 我对 URL 的导航是完美的,然后,我完全使用了你的代码,我得到了以下错误:selenium.common.exceptions.TimeoutException: Message:
【解决方案2】:

该项目在页面上不可见,这就是 visibility_of_element_located() 出现超时异常的原因。

要提取文本3351500920037,您需要诱导WebDriverWaitpresence_of_element_located()get_attribute('textContent'),它将给出您正在寻找的结果。

print(WebDriverWait(driver,20).until(EC.presence_of_element_located((By.XPATH, "//*[contains(.,'EAN')]/following-sibling::dd[1]"))).get_attribute('textContent'))

这是完整的代码:

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

driver = webdriver.Chrome()
driver.get("https://www.bol.com/")
query='Azzaro Chrome 100 ml'
searchelement=WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.ID,"searchfor")))
searchelement.send_keys(query)
searchelement.submit()
WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.CSS_SELECTOR,".product-title.px_list_page_product_click"))).click()
print(WebDriverWait(driver,20).until(EC.presence_of_element_located((By.XPATH, "//*[contains(.,'EAN')]/following-sibling::dd[1]"))).get_attribute('textContent'))
driver.quit()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-19
    • 2022-01-11
    • 1970-01-01
    • 2021-05-17
    • 1970-01-01
    相关资源
    最近更新 更多