Python/Selenium使用Firefox下载PDF

Python/Selenium使用Firefox下载PDF,python,selenium-webdriver,firefox,selenium-firefoxdriver,Python,Selenium Webdriver,Firefox,Selenium Firefoxdriver,在我的代码中,我使用Firefox作为浏览器导航到一个站点,进行搜索,然后单击查看每个pdf文档。一旦进入文档(加载时不会提示我下载),我就想下载文档。我找到了一个Java版本的实现方法,但在Python中并不容易。我还在下面尝试从Adobe框架中选择元素(直接下载它,但它再次找不到xpath对象) 也许你已经解决了这个问题,但是你的问题帮助我解决了我所面临的同样的问题 您只需要将“driver=webdriver.Firefox”部分放在“options.set_preference”之后,并

在我的代码中,我使用Firefox作为浏览器导航到一个站点,进行搜索,然后单击查看每个pdf文档。一旦进入文档(加载时不会提示我下载),我就想下载文档。我找到了一个Java版本的实现方法,但在Python中并不容易。我还在下面尝试从Adobe框架中选择元素(直接下载它,但它再次找不到xpath对象)


也许你已经解决了这个问题,但是你的问题帮助我解决了我所面临的同样的问题

您只需要将“driver=webdriver.Firefox”部分放在“options.set_preference”之后,并在webdriver.Firefox中添加options参数

除此之外,您还需要更改部件:

options.set_preference("browser.download.useDownloadDir", "true")
options.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/pdf")
options.set_preference("pdfjs.disabled", "true")
用于:

下面是我的代码

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import requests, time



options = webdriver.FirefoxOptions()
options.set_preference("browser.download.folderList", 2)
options.set_preference("browser.download.dir", "/Users/username/Desktop/oklahoma/oklahoma_county")
options.set_preference("browser.download.useDownloadDir", True)
options.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/pdf")
options.set_preference("pdfjs.disabled", True)
driver = webdriver.Firefox(options = options, executable_path="geckodriver")
driver.get("https://www.okcc.online/")
driver.maximize_window()

wait = WebDriverWait(driver, 10)
wait.until(EC.element_to_be_clickable((By.XPATH, "//*[@id='rod-menu-button']"))).click()
wait.until(EC.element_to_be_clickable((By.XPATH, "//input[@id='rodDocTypeTxt']"))).send_keys('MTG')
wait.until(EC.element_to_be_clickable((By.XPATH, "//ul[@id='ui-id-1']//li//div"))).click()

driver.find_element_by_xpath('//*[@id="rod-date-toggle"]').click()

driver.find_element_by_xpath('//*[@id="rodFromDateTxt"]').send_keys('4/1/2020')
driver.find_element_by_xpath('//*[@id="rodToDateTxt"]').send_keys('4/20/2020')

search_button = driver.find_element_by_xpath('//*[@id="rod-submit-search"]').click()

time.sleep(2)

pdf = driver.find_elements_by_css_selector(".icon.pdf-icon")

for i in pdf:
    i.click()
    time.sleep(3)
    download_button = driver.find_element_by_xpath('//*[@id="download"]')
    download_button.click()
    close_button = driver.find_element_by_css_selector('.pdf-function-button.pdf-close')
    close_button.click()

你有两个问题。首先,加载PDF弹出窗口需要一些时间。您应该使用webdriver.wait,直到出现新的iframe。第二,PDF弹出窗口位于iframe中。在找到下载按钮之前,您需要切换到该iframe。注意:在转到下一个PDF之前,您需要在完成iframe后切换回iframe。是否回答您的问题?不是真的。它适用于Chrome,而不是Firefox。在这种情况下,如何选择iframe?我试着选择它,但它没有注册。我有同样的问题
options.set_preference("browser.download.useDownloadDir", True)
options.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/pdf")
options.set_preference("pdfjs.disabled", True)
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import requests, time



options = webdriver.FirefoxOptions()
options.set_preference("browser.download.folderList", 2)
options.set_preference("browser.download.dir", "/Users/username/Desktop/oklahoma/oklahoma_county")
options.set_preference("browser.download.useDownloadDir", True)
options.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/pdf")
options.set_preference("pdfjs.disabled", True)
driver = webdriver.Firefox(options = options, executable_path="geckodriver")
driver.get("https://www.okcc.online/")
driver.maximize_window()

wait = WebDriverWait(driver, 10)
wait.until(EC.element_to_be_clickable((By.XPATH, "//*[@id='rod-menu-button']"))).click()
wait.until(EC.element_to_be_clickable((By.XPATH, "//input[@id='rodDocTypeTxt']"))).send_keys('MTG')
wait.until(EC.element_to_be_clickable((By.XPATH, "//ul[@id='ui-id-1']//li//div"))).click()

driver.find_element_by_xpath('//*[@id="rod-date-toggle"]').click()

driver.find_element_by_xpath('//*[@id="rodFromDateTxt"]').send_keys('4/1/2020')
driver.find_element_by_xpath('//*[@id="rodToDateTxt"]').send_keys('4/20/2020')

search_button = driver.find_element_by_xpath('//*[@id="rod-submit-search"]').click()

time.sleep(2)

pdf = driver.find_elements_by_css_selector(".icon.pdf-icon")

for i in pdf:
    i.click()
    time.sleep(3)
    download_button = driver.find_element_by_xpath('//*[@id="download"]')
    download_button.click()
    close_button = driver.find_element_by_css_selector('.pdf-function-button.pdf-close')
    close_button.click()