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