2016-03-31 21 views
2

Ich würde gerne Webdriver verwenden, um eine Datei auszuwählen, aber anderen Antworten folgen sie nicht. Sie sagen, geben Sie einfach den Knopf einen Dateipfad, und das tut nichts. Der Upload sieht nach Anklicken der Schaltfläche:Dateien mit selen webdriver python hochladen

enter image description here

Dies ist, was andere zu tun sagen, funktioniert aber nicht:

element = driver.find_element_by_name("file") 
element.send_keys("/home/pavel/Desktop/949IH3GNHAo.jpg") 

Wie kann ich Dateien einreichen, wenn ich bin in ein Webdriver-Instanz? Danke

+1

Was meinen Sie mit "funktioniert nicht"? Was geschieht? Können Sie den vollständigen Code einschließlich der URL, zu der Sie navigieren, posten? Vielen Dank. – alecxe

+1

Nachdem Sie die Bilddatei mit sendkeys ausgewählt haben, müssen Sie auf die Schaltfläche zum Hochladen klicken und nicht erneut auf Durchsuchen. –

Antwort

-1

Dieses Problem bei uploading photos to Craigslist with Python and Selenium gelöst

def add_photo(self, filepath_to_photo): 
    photo_filepath_input_box = self.driver.find_element_by_xpath("//input[@type='file']") 
    photo_filepath_input_box.send_keys(filepath_to_photo) # "/home/cchilders/photos/myhouse/upperrightbedroom/photo1.png" 
0

Upload-Fenster sind Systemfenster und nicht im Webview. Selenium-Webdrives können nur die Dinge in einem Webview steuern. Sie müssen die Aufgabe der Auswahl der Datei an eine andere Bibliothek wie AutoIT übergeben.

+1

Sind Sie sicher? : https://saucelabs.com/resources/articles/selenium-file-upload –

+0

Ich war nicht in der Lage, diesen Stil zu arbeiten. Ich werde es wieder versuchen Ich denke, – codyc4321

2

Versuchen Sie AutoIT.

Es ist sehr einfach zu bedienen und macht den Job.

Klicken Sie auf die Schaltfläche Upload zuerst mit dem WebDriver Skript und dann die AutoIT EXE-Datei ausführen mit:

import subprocess 
subprocess.Popen('[name_of_your_script].exe') 

geben es dann eine wait.until, erwarteten Bedingungen verwenden, so wartet er, bis die Datei endet das Hochladen .

Ein Beispiel AutoIT Code unten wählt eine Datei namens „AAUPLOADFILE.png“:

Local $hWnd=WinWait("[CLASS:#32770]","",10) 

ControlFocus($hWnd,"","Edit1") 

; Wait for 2 seconds. 

    Sleep(2000) 

    ControlSetText($hWnd, "", "Edit1", "AAUPLOADFILE.png") 

    Sleep(2000) 

; Click on the Open button 

    ControlClick($hWnd, "","Button1"); 

Sobald Sie ein Skript geschrieben, Rechtsklick auf die Datei und wählen Sie Compile Script habe, was ein schaffen wird .exe-Datei.

+0

das scheint vernünftig ali. Haben Sie ein Beispiel, wie Sie den Dateinamen weitergeben können? Wenn mein Python-Skript 'FILENAME =" AAUPLOADFILE.png "' und andere weitergeben kann, wäre ich begeistert. Kann ich dich posten? – codyc4321

+0

das andere Problem ist, ich verwende keine Windows – codyc4321

+1

Ich habe noch nie Ubuntu/Linux für die Automatisierung verwendet, tut mir leid, und AutoIT ist in der Tat eine Windows-App. Ich habe das gefunden, obwohl sie sagen, dass es ein AutoIT-Äquivalent für Linux ist: http://www.semicomplete.com/projects/xdotool/ – Alichino

0

ich auch Problem mit Upload mit Python und Selen hatte. Es war, weil Upload-Webformular nicht sichtbar war, und unter dem "Upload-Bild" befindet. (verstecktes Upload-Formular)

Also habe ich einen Workaround geschafft.

# Try to open page with upload form 
driver.get('https://bla.com/library/browser') 

# Waiting for upload element with name upload-search-block 
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "upload-search-block"))) 

# Relocate hidden upload form using JS 
driver.execute_script("document.getElementById('upload-search-block').style.left='200px';") 
driver.execute_script("document.getElementById('upload-search-block').style.top='170px';") 

# And upload file in the end 
upload = driver.find_element_by_id('upload-search-block') 
upload.send_keys('/tmp/custom_doc.docx') 

Viel Glück.