使用SeleniumWebDriver、python检索动态值

2024-04-25 19:39:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道已经有类似的线索。然而,当尝试以前建议的方法来检索特定的动态表值时,我得到的要么是nbsp值,要么是像"1a207feb-8080-4ff0-..."这样的神秘值

我想做什么:

here获取黄金的欧元/盎司价值的当前表值。我“检查”了页面,得到了xpath (//*[@id="bullionPriceTable"]/div/table/tbody/tr[3]/td[3]/span)

我的代码:

driver = webdriver.Chrome("path/to/chromedriver")
driver.get("https://www.bullionvault.com/gold-price-chart.do")

xpath = '//*[@id="bullionPriceTable"]/div/table/tbody/tr[3]/td[3]/span'

select=driver.find_element_by_xpath(xpath)
print(select)

这张照片是:

<selenium.webdriver.remote.webelement.WebElement (session="3ade114e9f0907e4eb13deac6a264fc8", element="3a670af5-8594-4504-908a-a9bfcbac7342")>

这显然不是我要找的号码

我还尝试在webElement上使用get_属性('innerHtml')和.text,但没有效果。我错过了什么?我只是没有正确地编码这个值,还是从错误的源中提取


Tags: dividgetdrivertableelementselectxpath
2条回答

等待页面加载,然后尝试获取innerHTML,如下面的示例

import time

from selenium import webdriver

chrome_browser = webdriver.Chrome(
    executable_path=r"chromedriver.exe")

chrome_browser.get("https://www.bullionvault.com/gold-price-chart.do")

time.sleep(2)

select = chrome_browser.find_element_by_xpath(
    "//*[@id='bullionPriceTable']/div/table/tbody/tr[3]/td[3]/span"
).get_attribute("innerHTML")

print(select)

€1,450.98

要提取黄金欧元/盎司价值的表值,即文本€1452.47,您必须为visibility_of_element_located()引入WebDriverWait,并且您可以使用以下任一Locator Strategies

  • 使用XPATH和get_attribute()

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC    
    
    driver.get('https://www.bullionvault.com/gold-price-chart.do#')
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='cookies-warning-buttons']//a[text()='Accept']"))).click()
    driver.execute_script("return arguments[0].scrollIntoView(true);", WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//strong[text()='Live Gold Price']"))))
    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//th[text()='Gold Price per Ounce']//following-sibling::td[3]/span[@data-currency='EUR']"))).get_attribute("innerHTML"))
    
  • 控制台输出:

    €1,456.30
    
  • 使用XPATH和文本属性:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
    driver.get('https://www.bullionvault.com/gold-price-chart.do#')
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='cookies-warning-buttons']//a[text()='Accept']"))).click()
    driver.execute_script("return arguments[0].scrollIntoView(true);", WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//strong[text()='Live Gold Price']"))))
    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//th[text()='Gold Price per Ounce']//following-sibling::td[3]/span[@data-currency='EUR']"))).text)
    
  • 控制台输出:

    €1,456.30
    

相关问题 更多 >