2017-01-04 1 views
1

Ich muss einen Dateiupload auf eine Webseite automatisieren, die einige Javascript-Code verwendet. Um dies zu tun, verwende ich Python Selen-Web-Treiber, um auf die Webseite zuzugreifen. Melden Sie sich auf der Webseite an und navigieren Sie, bis die Seite, auf der die Datei hochgeladen werden soll, einwandfrei funktioniert, aber dann kann ich nicht herausfinden, wie Sie auf die Schaltfläche "Datei auswählen" klicken.Laden Sie eine Datei mit Python Selenium in Javascript Web

Dies ist, wie der Code aussieht, bis der Punkt, an dem ich die Datei laden soll:

from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 
from selenium.webdriver.support import ui 
from selenium.webdriver.support.wait import WebDriverWait  

def page_is_loaded(driver): 
    return driver.find_element_by_tag_name("body") != None 

base_url = 'https://www.xxxxxx.es/yyyyy/login.do?method=login' 

driver = webdriver.Chrome('/usr/lib/chromium-browser/chromedriver') 
driver.get(base_url) 

wait = ui.WebDriverWait(driver, 10) 
wait.until(page_is_loaded) 

username = driver.find_element_by_name('j_username') 
username.send_keys('XXX') 

password = driver.find_element_by_name('j_password') 
password.send_keys('YYY') 

accept = driver.find_element_by_name('aceptar') 
accept.click() 

# 'Carga de ficheros' 
driver.find_element_by_xpath('//*[@id="cMI_1"]').click(); 
driver.find_element_by_xpath('//*[@id="cMI_1_1"]').click(); 

Dies ist, wie die Web-Seite wie folgt aussieht: enter image description here

Und das ist, wie die Seite aussieht wie wenn es Inspektion: enter image description here

ich viele Methoden versucht haben, zu ‚Klick‘ die ‚wählen sie Datei‘ klicken, ohne Erfolg:

driver.find_element_by_xpath('//*[@id="tablaFormulario"]/tbody/tr[6]/td[2]/input').click 
driver.find_element_by_css_selector('tablaFormulario').click() 
driver.find_element_by_link_text('fichero').click()  
driver.find_element_by_link_text('Choose File').click() 
driver.find_element_by_class_name('contCampo').click() 
driver.find_elements_by_tag_name('fichero').click() 
driver.find_elements_by_tag_name('contCampo').click() 

Ich vermute, dass es mit der Tatsache zusammenhängt, dass die Seite mit etwas JavaScript-Code läuft ... Jede Hilfe wird geschätzt!

Antwort

1

Auch wenn Sie auf diese Schaltfläche klicken können, können Sie die Aufforderung zum Hochladen von Dateien mit nicht verarbeiten. So sollten Sie nicht click(), dass die Taste Datei zu, sondern sendet Pfad zur Datei:

from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 

driver.switch_to_frame('principal') 
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//input[@type="file"]'))).send_keys("C:\\path\\to\\file") 
+0

Danke für Ihre Hilfe @Andersson! Aber die Sache ist, dass ich eine Nachricht bekomme, die besagt, dass dieses Element nicht gefunden werden konnte: 'NoSuchElementException: kein solches Element: Element konnte nicht gefunden werden: {" method ":" xpath "," selector ":" // input [@ type = "file"] "} (Sitzungsinfo: chrome = 55.0.2883.87) (Treiberinfo: chromedriver = 2.27.440175 (9bc1d90b8bfa4dd181fbbf769a5eb5e575574320), plattform = Linux 4.4.0-57-generisch x86_64)' Dies ist die Das gleiche Problem hatte ich mit den anderen Methoden, die ich versuchte, Selen konnte die Elemente nicht finden. –

+0

Überprüfen Sie die aktualisierte Antwort. Überprüfen Sie auch, ob Formular nicht innerhalb eines ' ' –

Verwandte Themen