Получение значения динамического c с помощью веб-драйвера селена, python - PullRequest
1 голос
/ 01 апреля 2020

Мне известно, что подобные темы уже существуют. Тем не менее, при попытке ранее предложенных методов получить мое заданное c dynamici c табличное значение, все, что я получаю, это либо значение nbsp, либо что-то крипт c вроде "1a207feb-8080-4ff0-..."

Что Я пытаюсь сделать:

Получить текущее табличное значение для евро / унции для золота из здесь . Я "осмотрел" страницу и получил 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")>

, что, очевидно, не является числом, которым я был ищу.

Я также экспериментировал с использованием get_attribute ('inner Html') и .text в webElement, но безрезультатно. Что мне здесь не хватает? Я просто неправильно кодирую это значение или извлекаю из неверного источника?

Ответы [ 2 ]

1 голос
/ 02 апреля 2020

Чтобы извлечь табличное значение для значения в евро / унциях для золота, то есть текст € 1 452,47 , вы должны вызвать WebDriverWait для visibility_of_element_located(), и вы можете использовать любой из следующих Стратегии локатора :

  • Использование 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 и text :

    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
    
0 голосов
/ 01 апреля 2020

Дождитесь загрузки страницы, затем попытайтесь получить 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

...