फ़ायरफ़ॉक्स में फ़ाइल डाउनलोड संवाद के लिए प्रवेश


83

क्या किसी प्रकार की एपीआई है जो मुझे फ़ायरफ़ॉक्स में एक फ़ाइल डाउनलोड संवाद में हेरफेर करने की अनुमति दे सकती है? (मैं उस चीज़ को एक्सेस करना चाहता हूं जब उपयोगकर्ता कुछ करता है, न कि खुद को शुरू करने के लिए)।

इस संवाद को सेलेनियम तक पहुँचाने के लिए मुझे क्या करना है (और क्या सेलेनियम "विशेषाधिकार प्राप्त मोड" क्रोम इंटरफ़ेस तक पहुँचने के लिए पर्याप्त है कुछ ऐसा है जिसके बारे में मुझे यकीन नहीं है)।


3
मैंने पहली बार अपने अपाचे वर्चुअल प्राइवेट सर्वर को कॉन्फ़िगर करने में तीन सप्ताह का सबसे अच्छा हिस्सा बिताया है (क्योंकि यह साझा होस्टिंग पर सेलेनियम को चलाने में थोड़ी मुश्किल है), फ़ायरफ़ॉक्स, सेलेनियम और पायथन को एक साथ काम करना, कदम रखने के लिए वास्तविक पायथन कोड लिखना एक बहुत जावास्क्रिप्ट-भारी साइट के माध्यम से, सभी इसके अंत में एक फ़ाइल डाउनलोड करने के लिए। मुझे तब एहसास हुआ कि मुझे पता नहीं है कि वास्तव में डाउनलोड की गई फ़ाइल तक कैसे पहुंचा जाए। मुझे वास्तव में खुशी है कि आपने पहले प्रश्न पूछा।
पॉल डी। वेट

अगर Apple फ़ायरफ़ॉक्स एक सभ्य AppleScript शब्दकोश था कि AppleScript इसके लिए बहुत अच्छा होगा।
निकोलस बारबुल्स्को

क्या कोई मेरी मदद कर सकता है [इस वेबसाइट में प्रश्न] [१] [१]: stackoverflow.com/questions/27058053/…
येवगेनी सेमाशको २१'१४ '11

जवाबों:


33

मेरी जानकारी में नहीं। लेकिन आप फ़ायरफ़ॉक्स को स्वचालित रूप से डाउनलोड शुरू करने के लिए कॉन्फ़िगर कर सकते हैं और फ़ाइल को एक विशिष्ट स्थान पर सहेज सकते हैं । आपका परीक्षण तब जांच सकता है कि फ़ाइल वास्तव में आ गई है।


ठीक है, मुझे लगता है कि मैं इस समाधान के साथ जाऊंगा।
एंड्री शेककिन

1
लेकिन सेलेनियम फ़ायरफ़ॉक्स को डिफ़ॉल्ट प्रोफ़ाइल में लॉन्च करेगा (चूंकि कोई प्रोफ़ाइल निर्दिष्ट नहीं है) इसलिए हर बार जब आप इसे कॉन्फ़िगर करते हैं। इसके बजाय अपनी प्राथमिकताओं के साथ एक नया प्रोफ़ाइल बनाएं ताकि यह आसान हो।
विग्नेश धामोदरन

71

मेरे पास इस समस्या का हल है, कोड की जाँच करें:

FirefoxProfile firefoxProfile = new FirefoxProfile();

firefoxProfile.setPreference("browser.download.folderList",2);
firefoxProfile.setPreference("browser.download.manager.showWhenStarting",false);
firefoxProfile.setPreference("browser.download.dir","c:\\downloads");
firefoxProfile.setPreference("browser.helperApps.neverAsk.saveToDisk","text/csv");

WebDriver driver = new FirefoxDriver(firefoxProfile);//new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), capability);

driver.navigate().to("http://www.myfile.com/hey.csv");

1
बंद करें, लेकिन 8/17/2013 के रूप में Ubuntu 12.04 पर फ़ायरफ़ॉक्स के लिए काफी काम नहीं कर रहा है। "ब्राउजर।
बाकायारो

2
मूल्य नाम बदला जा सकता है, यह एक वर्ष से अधिक है।
dlopezgonzalez

1
मैं फ़ाइल को ऑटो-सेव करने के लिए उसी विधि का उपयोग कर रहा हूं लेकिन इसके काम नहीं कर रहा हूं। मेरा फ़ायरफ़ॉक्स संस्करण 20.0 है। और मैं पीडीएफ फाइलों को डाउनलोड करने की कोशिश कर रहा हूं (MIME प्रकार का इस्तेमाल किया गया-> एप्लिकेशन / पीडीएफ, एप्लिकेशन / एक्स-पीडीएफ)
यतीन

3
ऐसा नहीं है कि यह साथ काम नहीं कर रहा है Content-Disposition: attachment। फ़ायरफ़ॉक्स हमेशा इस मामले में एक संवाद पॉपअप लगता है!
मार्टिन होलर

linux में xls फाइल डाउनलोड करने के लिए setPreference("browser.helperApps.neverAsk.saveToDisk", "application/xls");
इसने

42

मैं उसी समस्या से रुका हुआ था, लेकिन मुझे एक समाधान मिला। मैंने इसे वैसे ही किया जैसे इस ब्लॉग ने किया।

बेशक यह जावा था, मैंने इसे पायथन में अनुवादित किया है:

fp = webdriver.FirefoxProfile()

fp.set_preference("browser.download.folderList",2)
fp.set_preference("browser.download.manager.showWhenStarting",False)
fp.set_preference("browser.download.dir",getcwd())
fp.set_preference("browser.helperApps.neverAsk.saveToDisk","text/csv")

browser = webdriver.Firefox(firefox_profile=fp)

मेरे उदाहरण में यह एक CSV फ़ाइल थी। लेकिन जब आपको अधिक की आवश्यकता होती है, तो इसमें संग्रहीत किया जाता है~/.mozilla/$USER_PROFILE/mimeTypes.rdf


3
मैंने यह कोशिश की है, लेकिन यह मेरे लिए काम नहीं करता है। फ़ाइल सहेजें संवाद अभी भी दिखाई देता है।
इलफोंसो

1
धन्यवाद, अंतिम वरीयता क्लच थी: "एप्लिकेशन / पीडीएफ"
user2426679

1
मैं फ़ाइल को ऑटो-सेव करने के लिए उसी विधि का उपयोग कर रहा हूं लेकिन इसके काम नहीं कर रहा हूं। मेरा फ़ायरफ़ॉक्स संस्करण 20.0 है। और मैं पीडीएफ फाइलों को डाउनलोड करने की कोशिश कर रहा हूं (MIME प्रकार का उपयोग किया गया-> आवेदन / पीडीएफ, आवेदन / एक्स-पीडीएफ)
यतीन

1
शुक्रिया @Akendo। यह मेरे लिए काम कर रहा है अजगर 3.4.3, सेलेनियम-2.52 और Firefox 44 का उपयोग कर
इगोर

8

वेब एप्लिकेशन 3 अलग-अलग प्रकार के पॉप-अप उत्पन्न करते हैं; अर्थात्,

 1| JavaScript PopUps
 2| Browser PopUps
 3| Native OS PopUps [e.g., Windows Popup like Upload/Download]

सामान्य तौर पर, जावास्क्रिप्ट पॉप-अप वेब एप्लिकेशन कोड द्वारा उत्पन्न होते हैं। सेलेनियम इन जावास्क्रिप्ट पॉप-अप को संभालने के लिए एक एपीआई प्रदान करता है, जैसे कि Alert

आखिरकार, ब्राउज़र पॉप-अप और डाउनलोड फ़ाइलों को अनदेखा करने का सबसे सरल तरीका ब्राउज़र प्रोफाइल का उपयोग करके किया जाता है; ऐसा करने के कुछ तरीके हैं:

  • ब्राउज़र गुणों पर परिवर्तन को मैन्युअल रूप से शामिल करें (या)
  • प्रोफ़ाइल सेटप्रेशन का उपयोग करके ब्राउज़र गुणों को अनुकूलित करें

Method1

इससे पहले कि आप ब्राउज़र प्रोफाइल पर पॉप-अप के साथ काम करना शुरू करें, यह सुनिश्चित करें कि डाउनलोड विकल्प सेव फ़ाइल में डिफ़ॉल्ट हैं।

(फ़ायरफ़ॉक्स खोलें) उपकरण> विकल्प> अनुप्रयोग

यहाँ छवि विवरण दर्ज करें

Method2

नीचे दिए गए स्निपेट का उपयोग करें और जब भी आवश्यक हो संपादन करें।

FirefoxProfile profile = new FirefoxProfile();

String path = "C:\\Test\\";
profile.setPreference("browser.download.folderList", 2);
profile.setPreference("browser.download.dir", path);
profile.setPreference("browser.download.manager.alertOnEXEOpen", false);
profile.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/msword, application/csv, application/ris, text/csv, image/png, application/pdf, text/html, text/plain, application/zip, application/x-zip, application/x-zip-compressed, application/download, application/octet-stream");
profile.setPreference("browser.download.manager.showWhenStarting", false);
profile.setPreference("browser.download.manager.focusWhenStarting", false);  
profile.setPreference("browser.download.useDownloadDir", true);
profile.setPreference("browser.helperApps.alwaysAsk.force", false);
profile.setPreference("browser.download.manager.alertOnEXEOpen", false);
profile.setPreference("browser.download.manager.closeWhenDone", true);
profile.setPreference("browser.download.manager.showAlertOnComplete", false);
profile.setPreference("browser.download.manager.useWindow", false);
profile.setPreference("services.sync.prefs.sync.browser.download.manager.showWhenStarting", false);
profile.setPreference("pdfjs.disabled", true);
       
driver = new FirefoxDriver(profile);

4

मैं उसी मुद्दे का सामना कर रहा था। हमारे आवेदन में फायरफॉक्स का उदाहरण निम्नानुसार DesiredCapabilities पारित करके बनाया गया था

driver = new FirefoxDriver(capabilities);

दूसरों के सुझावों के आधार पर, मैंने अपने परिवर्तन किए

FirefoxProfile firefoxProfile = new FirefoxProfile();     
firefoxProfile.setPreference("browser.helperApps.neverAsk.saveToDisk",
    "application/octet-stream");
driver = new FirefoxDrvier(firefoxProfile);

यह उद्देश्य पूरा हुआ लेकिन दुर्भाग्य से मेरे अन्य स्वचालन परीक्षणों में असफलता होने लगी। और कारण यह था, मैंने उन क्षमताओं को हटा दिया है जो पहले पारित की जा रही थीं।

नेट पर कुछ और ब्राउज़िंग और एक वैकल्पिक रास्ता मिला। हम प्रोफ़ाइल को वांछित क्षमताओं में सेट कर सकते हैं।

तो नया वर्किंग कोड जैसा दिखता है

DesiredCapabilities capabilities = DesiredCapabilities.firefox();

// add more capabilities as per your need.
FirefoxProfile firefoxProfile = new FirefoxProfile();        
firefoxProfile.setPreference("browser.helperApps.neverAsk.saveToDisk",
    "application/octet-stream");

// set the firefoxprofile as a capability
capabilities.setCapability(FirefoxDriver.PROFILE, firefoxProfile);
driver = new FirefoxDriver(capabilities);

3

पता नहीं है, लेकिन आप शायद फ़ायरफ़ॉक्स डाउनलोड Addons में से एक के स्रोत की जाँच कर सकते हैं।

यहाँ एक के लिए स्रोत है जिसे मैं डाउनलोड स्टेटसबार का उपयोग करता हूं ।


धन्यवाद, यह बहुत दिलचस्प है (लेकिन यह साबित करता है कि या तो असंभव या पागलपनपूर्ण है जब तक कि मैं xul भागों के साथ विस्तार नहीं लिख रहा हूं)।
एंड्री शेककिन

3

अधिकांश ब्राउज़र (मेरा मामला फ़ायरफ़ॉक्स में) डिफ़ॉल्ट रूप से ठीक बटन का चयन करें। इसलिए मैं निम्नलिखित कोड का उपयोग करके इसे हल करने में कामयाब रहा। यह मूल रूप से आपके लिए एंटर दबाता है और फाइल डाउनलोड हो जाती है।

Robot robot = new Robot();

// A short pause, just to be sure that OK is selected
Thread.sleep(3000);

robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);

3

मुझे भी यही समस्या थी, मुझे सेव डायलॉग का कोई एक्सेस नहीं चाहिए था।

नीचे दिए गए कोड मदद कर सकते हैं:

    FirefoxProfile fp = new FirefoxProfile();
    fp.setPreference("browser.download.folderList",2);
    fp.setPreference("browser.download.manager.showWhenStarting",false);
    fp.setPreference("browser.helperApps.alwaysAsk.force", false);
    // Below you have to set the content-type of downloading file(I have set simple CSV file)
    fp.setPreference("browser.helperApps.neverAsk.saveToDisk","text/csv");

जिस फ़ाइल प्रकार को डाउनलोड किया जा रहा है, उसके अनुसार आपको सामग्री प्रकार निर्दिष्ट करने की आवश्यकता है

आप 'के साथ अलग किए गए कई सामग्री-प्रकार निर्दिष्ट कर सकते हैं ; '

उदाहरण के लिए:

    fp.setPreference("browser.helperApps.neverAsk.saveToDisk","text/csv;application/vnd.ms-excel;application/msword");

2

इसके बजाय मूल फ़ाइल-डाउनलोड संवाद को ट्रिगर करने के बजाय:

By DOWNLOAD_ANCHOR = By.partialLinkText("download");
driver.findElement(DOWNLOAD_ANCHOR).click();

मैं आमतौर पर इसके बजाय मूल फ़ाइल डाउनलोड संवाद को बायपास करने के लिए करता हूं। इस तरह यह सभी ब्राउज़रों पर काम करता है:

String downloadURL = driver.findElement(DOWNLOAD_ANCHOR).getAttribute("href");
File downloadedFile = getFileFromURL(downloadURL);

इसके लिए बस यह आवश्यक है कि आप ऐसी विधि लागू करें getFileFromURLजो किसी फ़ाइल को डाउनलोड करने के लिए Apache HttpClient का उपयोग करती है और आपके लिए एक फ़ाइल संदर्भ लौटाती है।

इसी तरह, यदि आप सेलेनाइड का उपयोग करते हैं , तो यह download()फ़ाइल डाउनलोड से निपटने के लिए बिल्ट-इन फ़ंक्शन का उपयोग करके उसी तरह काम करता है ।


यह केवल HTML में वैधानिक रूप से लिंक की गई फ़ाइलों के लिए काम करेगा, उदाहरण के लिए पोस्ट (या समान) अनुरोध के आधार पर उत्पन्न होने वाली एक फ़ाइल नहीं है।
टोडर मिनाकोव

हाँ, दुविधा भिन्न हो सकती है। आमतौर पर, आप उन झालर मामलों में कुछ जानने के लिए अपने देवों के साथ काम करने में सक्षम होंगे।
djangofan

0

मैंने आपके उद्देश्य को अनसुना कर दिया, क्या आप चाहते थे कि आपका परीक्षण फ़ाइल को स्वचालित रूप से डाउनलोड करें जब परीक्षण निष्पादित हो रहा है, यदि हाँ, तो आपको अपने परीक्षण निष्पादन में कस्टम फ़ायरफ़ॉक्स प्रोफ़ाइल का उपयोग करने की आवश्यकता है।

कस्टम प्रोफ़ाइल में, पहली बार परीक्षण को मैन्युअल रूप से निष्पादित करें और यदि डाउनलोड डायलॉग आता है, तो इसे डिस्क पर सहेजें पर सेट करें, हमेशा यह क्रिया चेकबॉक्स करें जो यह सुनिश्चित करेगा कि फ़ाइल आपके परीक्षण चलाने के बाद अगली बार स्वचालित रूप से डाउनलोड हो जाएगी।


0

इसके अलावा आप जोड़ सकते हैं

      profile.setPreference("browser.download.panel.shown",false);

डाउनलोड की गई फ़ाइल सूची को निकालने के लिए जो डिफ़ॉल्ट रूप से दिखाई जाती है और वेब पेज के हिस्से को कवर करती है।

मेरी कुल सेटिंग्स हैं:

        DesiredCapabilities dc = DesiredCapabilities.firefox();
        dc.merge(capabillities);
        FirefoxProfile profile = new FirefoxProfile();
        profile.setAcceptUntrustedCertificates(true);
        profile.setPreference("browser.download.folderList", 4);
        profile.setPreference("browser.download.dir", TestConstants.downloadDir.getAbsolutePath());
        profile.setPreference("browser.download.manager.alertOnEXEOpen", false);
        profile.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/msword, application/csv, application/ris, text/csv, data:image/png, image/png, application/pdf, text/html, text/plain, application/zip, application/x-zip, application/x-zip-compressed, application/download, application/octet-stream");
        profile.setPreference("browser.download.manager.showWhenStarting", false);
        profile.setPreference("browser.download.manager.focusWhenStarting", false);
        profile.setPreference("browser.download.useDownloadDir", true);
        profile.setPreference("browser.helperApps.alwaysAsk.force", false);
        profile.setPreference("browser.download.manager.alertOnEXEOpen", false);
        profile.setPreference("browser.download.manager.closeWhenDone", true);
        profile.setPreference("browser.download.manager.showAlertOnComplete", false);
        profile.setPreference("browser.download.manager.useWindow", false);
        profile.setPreference("browser.download.panel.shown",false);
        dc.setCapability(FirefoxDriver.PROFILE, profile);
        this.driver = new FirefoxDriver(dc);

1
हाय नील एलिस, छवि बटन पर क्लिक करके, "निर्यात" एक पॉपअप विंडो खोलता है। फ़ाइल डाउनलोड पॉपअप विंडो से चालू हो जाता है और पॉपअप बंद हो जाता है। यदि संभव हो, तो कृपया इस परिदृश्य में मूक फ़ाइल डाउनलोड प्राप्त करने में मेरा मार्गदर्शन करें?
AVA
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.