Хотите скачать данные, используя селен и питон - PullRequest
0 голосов
/ 30 октября 2018

Привет, я хочу загрузить данные с Ссылка где я хочу скачать данные из региона '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 ]

0 голосов
/ 30 октября 2018

Как только вы получите доступ к 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

0 голосов
/ 30 октября 2018

Обе кнопки расположены внутри 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()
...