Selen-Python-Download, aber Datei wird als .part gespeichert

Mein Skript funktioniert, aber es ist das Speichern der Datei als .part, obwohl die Überprüfung dieser gegen eine manuell heruntergeladene Datei seine gleiche Größe und dankbar abgeschlossen. Ich kann nicht verstehen, warum es als Teildatei gespeichert wird. Sorta ist für meine nächste Idee unpraktisch. Hat jemand eine Vorstellung davon, warum das sein könnte? Hier ist mein Code … was funktioniert …

from selenium import webdriver from selenium.common.exceptions import NoSuchElementException from selenium.webdriver.common.keys import Keys import time import mechanize import urllib from urllib import urlretrieve fp = webdriver.FirefoxProfile() fp.set_preference("browser.download.folderList",1) fp.set_preference("browser.download.manager.showWhenStarting",False) fp.set_preference("browser.download.dir",'Users/matthewyoung/Downloads') fp.set_preference("browser.helperApps.neverAsk.saveToDisk","Plain text") fp.set_preference("browser.download.manager.scanWhenDone",False) fp.set_preference("browser.download.manager.showAlertOnComplete",True) fp.set_preference("browser.download.manager.useWindow",False) fp.set_preference("browser.helperApps.alwaysAsk.force",False) browser = webdriver.Firefox(firefox_profile=fp) #browser = webdriver.Firefox() # Get local session of firefox browser.get("http://vizier.u-strasbg.fr/vizier/surveys.htx") # Load page assert "VizieR" in browser.title #p = raw_input('Star name? ') elem = browser.find_element_by_name('-c') # Find the query box elem.send_keys('mwc 560' + Keys.RETURN) time.sleep(0.2) # Let the page load, will be added to the API elem=browser.find_element_by_name('-out.max') elem.send_keys('unlimited'+Keys.TAB) elem2=browser.find_element_by_name('-out.form') time.sleep(0.5) elem2.send_keys('; -Separated-Values') time.sleep(0.5) elem2.send_keys(Keys.TAB) elem2.send_keys(Keys.TAB) time.sleep(0.2) browser.find_element_by_class_name('data').submit() time.sleep(3.0) #df=elem2.send_keys(Keys.SPACE) #print df browser.close() 

  • Wie man Daten aus dynamischen Webseiten wie Flipkart mit Selen und Scrapy extrahiert?
  • Python-Selen überspringt notwendige Elemente
  • Wie gebe ich Optionen an den Selenium Chrome Treiber mit Python?
  • Chrom-Performance und Tracing-Logs erhalten
  • Wie listet man geladene Ressourcen mit Selen / PhantomJS auf?
  • Radio-Taste wird nicht in Selen / Python geklickt
  • Schleife über Optionsmenü Selen in Python
  • Wie bekomme ich derzeit Testcase Name von testsuite in unittest
  • 3 Solutions collect form web for “Selen-Python-Download, aber Datei wird als .part gespeichert”

    Es wird als .part heruntergeladen, da das Popup speichern als Dialogfenster erscheint. Python kann nicht mit dem Popup-Fenster umgehen. Ich habe festgestellt, dass, wenn Sie versuchen, Einstellungen für ein benutzerdefiniertes Profil im Webdriver zu setzen, es nicht unbedingt funktionieren (zum Beispiel konnte ich ein benutzerdefiniertes Profil in Selen setzen, um ein csv aber nicht ein pdf herunterzuladen). Allerdings war ich in der Lage, mein pdf Problem zu lösen, indem ich ein benutzerdefiniertes Profil in Firefox. Ich bin nicht sehr erfahren mit tsv-Dateien, so bin ich nicht sicher, welche Einstellung das wäre. Wenn du ein neues Firefox-Profil erstellen kannst (nach den Anweisungen hier: https://support.mozilla.org/en-US/kb/profile-manager-create-and-remove-firefox-profiles ) kannst du versuchen, das zu setzen Profil, um tsv standardmäßig zu speichern. Wenn Sie nicht wissen, die genaue Einstellung zu gehen und ändern in "über: config" können Sie versuchen, klicken Sie einfach auf das Kontrollkästchen auf dem Popup, um immer diese Arten von Dateien zu speichern.

    Von dort aus setzen Sie Ihr Profil auf das benutzerdefinierte Profil, das Sie so erstellt haben:

      profile = webdriver.firefox.firefox_profile.FirefoxProfile("/Users/matthewyoung/Library/Application Support/Firefox/Profiles/"YOUR PROFILE NAME") 

    Denken Sie daran, dass IHRE PROFIL NAME eine Reihe von zufälligen Buchstaben zuerst haben wird, also folgen Sie diesem Pfad, um den tatsächlichen Profilnamen zu finden.

    Ich denke, das einzige, was Sie fehlen aus Ihrem Firefox Profil Einstellung ist die folgende

     fp.set_preference("browser.helperApps.neverAsk.openFile", 'Plain Text') 

    Also der ganze Code sollte sein

     from selenium import webdriver from selenium.common.exceptions import NoSuchElementException from selenium.webdriver.common.keys import Keys import time fp = webdriver.FirefoxProfile() fp.set_preference("browser.download.folderList",2) fp.set_preference("browser.download.manager.showWhenStarting",False) fp.set_preference("browser.download.dir",'Users/matthewyoung/Downloads') fp.set_preference("browser.helperApps.neverAsk.openFile", 'Plain Text') fp.set_preference("browser.helperApps.neverAsk.saveToDisk","Plain text") fp.set_preference("browser.download.manager.scanWhenDone",False) fp.set_preference("browser.download.manager.showAlertOnComplete",True) fp.set_preference("browser.download.manager.useWindow",False) fp.set_preference("browser.helperApps.alwaysAsk.force",False) browser = webdriver.Firefox(firefox_profile=fp) browser.get("http://vizier.u-strasbg.fr/vizier/surveys.htx") # Load page assert "VizieR" in browser.title elem = browser.find_element_by_name('-c') # Find the query box elem.send_keys('mwc 560' + Keys.RETURN) time.sleep(0.2) # Let the page load, will be added to the API elem=browser.find_element_by_name('-out.max') elem.send_keys('unlimited'+Keys.TAB) elem2=browser.find_element_by_name('-out.form') time.sleep(0.5) elem2.send_keys('; -Separated-Values') time.sleep(0.5) elem2.send_keys(Keys.TAB) elem2.send_keys(Keys.TAB) time.sleep(0.2) browser.find_element_by_class_name('data').submit() time.sleep(3.0) browser.close() 

    Der folgende Wert sollte für Klartext verwendet werden:

     fp.set_preference("browser.helperApps.neverAsk.saveToDisk","text/plain") 
    Python ist die beste Programmiersprache der Welt.