Используйте Селен для загрузки нескольких PDF-файлов из списка URL - PullRequest
0 голосов
/ 24 января 2020

Привет, у меня есть приведенный ниже код, но он не загружается в мою папку. Я могу вытащить список URL, содержащий PDF, но я не могу заставить мой код, который загружает PDF, работать.

driver = webdriver.Chrome(
executable_path=os.path.join(GenericMethods.get_full_path_to_folder('drivers'), "chromedriver.exe"),
chrome_options=chrome_options)
download_dir = "D:\VIX\FOMC_Minutes"
months = ['January', 'February', 'March', 'April', 'May', 'June',
      'July', 'August', 'September', 'October', 'November', 'December']

years = ['1983', '1982', '1981', '1980', '1979', '1978', '1977', '1976', '1975', '1974',
     '1973', '1972', '1971', '1970', '1969', '1968', '1967', '1966', '1965', '1964',
     '1963', '1962', '1961', '1960']

driver.get(f'https://fraser.stlouisfed.org/title/677')
driver.set_page_load_timeout(15)
pdf_links=[]
search = driver.find_element_by_class_name('list-search.form-control.input-sm')
for y in years:

for m in months:
    print (m + "-" + y)
    search.clear()
    search.send_keys(y)
    WebDriverWait(driver, 30).until(EC.presence_of_element_located((By.XPATH, "//span[contains(., '" + y + "')]/parent::a")))
    xpath = "//span[contains(., '" + m + "') and contains(., '" + y + "')]/parent::a"
    elinks = driver.find_elements_by_xpath(xpath)
    if len(elinks)>0:
        print(elinks[0].get_attribute('href'))
        pdf_links.append(elinks[0].get_attribute('href'))

driver.quit()
print(pdf_links)

for url in pdf_links:
page = driver.get(url)
elinks = page.find_elements_by_css_selector("a[href*='.pdf']")
for elink in elinks:
download = driver.find_element_by_link_text(elink)
download.click()

1 Ответ

0 голосов
/ 24 января 2020

Вы должны немного подправить свой скрипт и использовать wget вместо стандартной загрузки. Таким образом, загрузка будет проще и быстрее.

обязательно добавьте этот импорт.

import wget
driver.set_page_load_timeout(15)
pdf_links=[]

for y in years:

    for m in months:
        driver.get(f'https://fraser.stlouisfed.org/title/677')
        search = WebDriverWait(driver, 30).until(
            EC.presence_of_element_located((By.CLASS_NAME, "list-search.form-control.input-sm")))
        search.clear()
        search.send_keys(y)
        WebDriverWait(driver, 30).until(EC.presence_of_element_located((By.XPATH, "//span[contains(., '" + y + "')]/parent::a")))
        xpath = "//span[contains(., '" + m + "') and contains(., '" + y + "')]/parent::a"
        elinks = driver.find_elements_by_xpath(xpath)
        if len(elinks)>0:
            driver.get(elinks[0].get_attribute('href'))
            # linkEle = WebDriverWait(driver, 30).until(EC.presence_of_element_located((By.XPATH, "//a[@class='btn btn-default btn-sm btn-block']")))
            linkEle = driver.find_elements_by_xpath("//a[@class='btn btn-default btn-sm btn-block']")
            if len(linkEle) >0:
                wget.download(linkEle[0].get_attribute('href'), m + "_" + y + ".pdf")
                # if you want to download to any specific directory then append the dir path as shown below.
                wget.download(linkEle[0].get_attribute('href'), dir_path + "/" + m + "_" + y + ".pdf")
driver.quit()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...