Хотите скачать данные, используя селен и питон
Привет, я хочу загрузить данные из 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()
Снимок браузера:
Обе кнопки расположены внутри 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()