【问题标题】:How to handle Save File dialog box in firefox using selenium with python?如何使用 selenium 和 python 在 Firefox 中处理“保存文件”对话框?
【发布时间】:2016-05-06 16:49:14
【问题描述】:

我正在尝试使用 python 中的 selenium 工具下载 .csv 文件,但在单击网页中的保存文件链接后,浏览器显示对话框。我尝试“警报”来处理此问题,但它给了我类似的错误,警报不存在.... 我使用 python 作为脚本语言和 selenium 作为工具。 这是我的代码:

fp = webdriver.FirefoxProfile()
fp.set_preference('browser.download.folderList', 2) # custom location
fp.set_preference('browser.download.manager.showWhenStarting', False)
fp.set_preference('browser.download.dir', 'C:\Temp\')
fp.set_preference('browser.helperApps.neverAsk.saveToDisk', 'application/csv,text/csv,text/comma-separated-values, application/octet-stream')
driver = webdriver.Firefox(profile)
driver.window_handles
driver.swich_to_window(driver.window_handles[0])
url=''
driver.get(url)
pass=driver.find_element_by_id('pswd')
pass.send_keys('xyz123')
driver.find_element_by_id('btnLogin').click()
driver.implicitly_wait(30)
driver.find_element_by_link_text('FileName').click()
driver.switch_to_alert().accept()

【问题讨论】:

  • 文件的确切 MIME 类型是什么?

标签: python-2.6


【解决方案1】:

最后我完成了保存文件对话框。我已经使用一些 Firefox 配置文件首选项设置来处理它。由于我无法找出我尽可能使用的确切 MIME 类型。 下面是我处理保存文件对话框的代码:

fp = webdriver.FirefoxProfile()
fp.set_preference('browser.download.folderList', 2) 
fp.set_preference('browser.download.manager.showWhenStarting', False)
fp.set_preference('browser.download.dir', r'C:\Temp\')
fp.set_preference('browser.helperApps.neverAsk.openFile', 'text/csv,application/x-msexcel,application/excel,application/x-excel,application/vnd.ms-excel,image/png,image/jpeg,text/html,text/plain,application/msword,application/xml')
fp.set_preference('browser.helperApps.neverAsk.saveToDisk', 'text/csv,application/x-msexcel,application/excel,application/x-excel,application/vnd.ms-excel,image/png,image/jpeg,text/html,text/plain,application/msword,application/xml')
fp.set_preference('browser.helperApps.alwaysAsk.force', False)
fp.set_preference('browser.download.manager.alertOnEXEOpen', False)
fp.set_preference('browser.download.manager.focusWhenStarting', False)
fp.set_preference('browser.download.manager.useWindow', False)
fp.set_preference('browser.download.manager.showAlertOnComplete', False)
fp.set_preference('browser.download.manager.closeWhenDone', False)
driver = webdriver.Firefox(fp)
driver.window_handles
driver.switch_to_window(driver.window_handles[0])
url=''
driver.get(url)
pass=driver.find_element_by_id('pswd')
pass.send_keys('xyz123')
driver.find_element_by_id('btnLogin').click()
driver.implicitly_wait(30)
driver.find_element_by_link_text('FileName').click()
time.sleep(5)

【讨论】:

  • 拼写错误。应该是driver.switch_to_window(driver.window_handles[0])。开关中缺少 t。还有一件事,路径应该是绝对的,而不是相对于脚本位置。在使用 Windows 时,您应该使用“r”前缀 r'C:\Temp\' 或使用双反斜杠 'C:\\Temp\\'。尾随反斜杠不是必需的。
  • 非常感谢@WojciechJakubas。我修正了错字并使用了绝对路径。
【解决方案2】:
 from selenium import webdriver
 from selenium.webdriver.support.ui import WebDriverWait
 import time
 import pyautogui

try :



driver = webdriver.Firefox()

driver.implicitly_wait(30)
driver.maximize_window()

driver.get("https://www.citysdk.eu/wp-content/uploads/2013/09/DELIVERABLE_WP4_TA_SRS_0.21.pdf")
# WebDriverWait(driver, 10).until(lambda d: d.execute_script('return document.readyState') == 'complete')
# Click the OK button and close

time.sleep(5)
webelem = driver.find_element_by_id('download')
webelem.click()

time.sleep(5)
print('press enter')
pyautogui.press('enter')


except Exception as err:
 print('ERROR: %sn' % str(err))

 driver.quit()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-22
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多