Python Selenium не загружает данные, когда я нажимаю на ссылку - PullRequest
0 голосов
/ 21 июня 2019

Я написал скрипт для поиска ссылки на скачивание с помощью серии кликов, сначала на значке шестеренки настроек, затем на вкладке «Экспорт данных» и, наконец, на щелчке здесь, чтобы загрузить ссылку на данные.

Однако, когда я нажимаю на последнюю ссылку, она не загружает данные в указанный мной каталог по умолчанию.

** в идеале я хотел бы загрузить данные непосредственно в переменную, но я даже не мог понять, почему общая загрузка не работала.

Я попытался получить href по ссылке для скачивания и открыть новую вкладку, используя этот URL, но он все равно ничего не дает

URL = 'https://edap.epa.gov/public/single/?appid=73b2b6a5-70c6-4820-b3fa-186ac094f10d&sheet=1e76b65b-dd6c-41fd-9143-ba44874e1f9d'
DELAY = 10



def init_driver(url):
    options = webdriver.chrome.options.Options()
    path = '/Users/X/Applications/chromedriver'
    options.add_argument("--headless")
    options.add_argument("download.default_directory=Users/X/Python/data_scraper/epa_data")
    driver = webdriver.Chrome(chrome_options= options, executable_path=path)
    driver.implicitly_wait(20)
    driver.get(url)
    return driver



def find_settings(web_driver):
    #find the settings gear
    #time.sleep(10)
    try:
        driver_wait = WebDriverWait(web_driver,10)
        ng_scope = driver_wait.until(EC.visibility_of_element_located((By.CLASS_NAME,"ng-scope")))
        settings = web_driver.find_element_by_css_selector("span.cl-icon.cl-icon--cogwheel.cl-icon-right-align")
        print(settings)
        settings.click()
        #export_data = web_driver.find_elements_by_css_selector("span.lui-list__text.ng-binding")
        #print(web_driver.page_source)



    except Exception as e:
        print(e)
        print(web_driver.page_source)


def get_settings_list(web_driver):
    #find the export button and download data
    menu_item_list = {}

    find_settings(web_driver)
    #print(web_driver.page_source)

    try:
        time.sleep(8)
        print("got menu_items")
        menu_items = web_driver.find_elements_by_css_selector("span.lui-list__text.ng-binding")
        for i in menu_items:
            print(i.text)
            menu_item_list[i.text] = i

    except Exception as e:
        print(e)

    return menu_item_list


def get_export_data(web_driver):
    menu_items = get_settings_list(web_driver)
    print(menu_items)
    export_data = menu_items['Export data']
    export_data.click()

    web_driver.execute_script("window.open();")
    print(driver.window_handles)
    main_window = driver.window_handles[0]
    temp_window = driver.window_handles[1]
    driver.switch_to_window(main_window)


    time.sleep(8)

    download_data = driver.find_element_by_xpath("//a[contains(text(), 'Click here to download your data file.')]")
    download_href = download_data.get_attribute('href')

    print(download_href)
    download_data.click()
    driver.switch_to_window(temp_window)
    driver.get("https://edap.epa.gov"+download_href)
    print(driver.page_source)



driver = init_driver(URL)
#get_settings_list(driver)
get_export_data(driver)

Я хотел бы, чтобы этот код эмулировал ручное действие: щелкните значок шестеренки настроек, затем экспортируйте данные, затем загрузите данные, которые загружают данные в CSV-файл (в идеале я хочу пропустить файл и вставить в кадр данных панд, но это вопрос в другой раз)

1 Ответ

0 голосов
/ 21 июня 2019

В целях безопасности Chrome не разрешает загрузку без запуска. Вот ссылка на дополнительную информацию и возможный обходной путь.

Если вам не нужно использовать Chrome, Firefox будет разрешать загрузку в автономном режиме, хотя и с некоторыми изменениями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...