【问题标题】:How to retrieve the text of a WebElement using Selenium - Python如何使用 Selenium 检索 WebElement 的文本 - Python
【发布时间】:2019-08-09 22:27:37
【问题描述】:

我是 Python 和 Web Scraping 的新手,所以请多多包涵。我一直在尝试构建一个网页抓取工具来打开网页、登录并检索某个值。到目前为止,我已经能够打开网页并登录。但是,我根本找不到一种方法来检索(打印)我需要的值。这是我当前代码的样子:

from selenium import webdriver
from bs4 import BeautifulSoup

driver = webdriver.Chrome(executable_path=r'C:/Users/User/Downloads/chromedriver.exe')

url = "xxxxxxxx"
driver.get(url)
driver.find_element_by_name("username").send_keys("xxxxx")
driver.find_element_by_name("password").send_keys("xxxxx")
elem = driver.find_element_by_css_selector("form#frmMain > a:nth-child(4)")
elem.click()

html = '''<p class="value noWrap" data-bind="text: MarketValue">R 4 516 469.32</p>'''
soup = BeautifulSoup(html, 'lxml')

for p in soup.find_all('p'):
    print(p.string)

driver.quit()

我需要的值嵌入在“R 4 516 469.32”上方的 html 变量中。但是,该值每天都在变化。我曾尝试使用 xpath 和 css,但由于某些奇怪的原因,有问题的值似乎被隐藏了。如何动态引用元素以便能够每天检索新值?

请注意:我已经删除了网址,因为这是一个用于公司目的的网站。

请帮忙!

非常感谢

【问题讨论】:

  • 你所说的“有问题的值似乎被隐藏了”是什么意思?
  • @JackFleeting 如果我打印出页面,这就是上面显示 html 的方式:

    跨度>
  • 我刚刚复制并粘贴了您的代码的主要 4 行(以 html = 开头)并以 R 4 516 469.32 结尾。所以我看不出问题出在哪里。如果我将最后一行更改为print(p.text),也是一样。
  • 我可能没有说清楚,我上面代码中的HTML代码指定了市值。但是我一直在寻找上述粘贴代码的动态解决方案,因为市场价值每天都在变化,我不想每天都检索 HTML 字符串

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


【解决方案1】:

所需元素是动态元素,因此要提取元素内的文本,您必须为visibility_of_element_located() 诱导 WebDriverWait,您可以使用以下任一解决方案:

  • 使用CSS_SELECTOR

    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "p.value.noWrap[data-bind$='MarketValue']"))).get_attribute("innerHTML"))
    
  • 使用XPATH

    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//p[@class='value noWrap' and contains(@data-bind,'MarketValue')]"))).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
    

【讨论】:

    猜你喜欢
    • 2019-06-22
    • 2021-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-09
    • 2018-02-04
    • 2020-10-08
    相关资源
    最近更新 更多