Хотите скачать данные, используя селен и питон

Привет, я хочу загрузить данные из Link, где я хочу скачать данные из региона 'SA'. Я пробовал следующий код, где после выбора вкладки "SA" я хочу нажать на стрелку загрузки над вкладкой "30 минут".

chromedriver = "/usr/lib/chromium-browser/chromedriver"
driver = webdriver.Chrome(chromedriver)
driver.get('https://www.aemo.com.au/Electricity/National-Electricity-Market-NEM/Data-dashboard#price-demand')
time.sleep(5)
driver.find_element_by_xpath("//*[@class='au-target btn btn-default btn-lg active' and text()='SA']").click()
button = driver.find_element_by_xpath("//button[@class='btn btn-default au-target' and click.trigger='clickDownload($event)']")
button.click()

Однако это выдает ошибку

Сообщение: такого элемента нет: невозможно найти элемент: {"method":"xpath","selector":"//*[@class='au-target btn btn-default btn-lg active' и text()='SA']"}

Вы можете получить xpath, посетив ссылку.

Заранее спасибо.

2 ответа

Как только вы получите доступ к URL https://www.aemo.com.au/Electricity/National-Electricity-Market-NEM/Data-dashboard#price-demand Для загрузки необходимых данных вам необходимо:

  • Вызовите WebDriverWait, чтобы нужный кадр был доступен, и переключитесь на него.
  • Индуцируйте WebDriverWait для желаемого элемента с текстом как SA, чтобы быть кликабельным.
  • Снова вызовите WebDriverWait, чтобы нужный элемент стал активным.
  • Вы можете использовать следующее решение:
  • Блок кода:

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    options = Options()
    options.add_argument("start-maximized")
    options.add_argument("disable-infobars")
    options.add_argument("--disable-extensions")
    driver = webdriver.Chrome(chrome_options=options, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
    driver.get('https://www.aemo.com.au/Electricity/National-Electricity-Market-NEM/Data-dashboard#price-demand')
    WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@class='iframe-dashboard-MTO' and@src='/aemo/apps/visualisations/elec-nem-priceanddemand.html']")))
    WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//button[@class='au-target btn btn-default btn-lg' and contains(.,'SA')]"))).click()
    WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='btn-group']//following::button[1]/i[@class='icon-download']"))).click()
    
  • Снимок браузера:

AEMO

Обе кнопки расположены внутри iframe, поэтому вам следует переключиться на этот кадр, прежде чем нажимать кнопки:

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

driver.switch_to.frame(driver.find_element_by_class_name('iframe-dashboard-MTO'))
wait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//button[text()='SA']"))).click()
wait(driver, 10).until(EC.element_to_be_clickable((By.CLASS_NAME, 'icon-download'))).click()
Другие вопросы по тегам