在Javascript Web中使用Python Selenium上传文件

时间:2017-01-04 10:47:44

标签: python-2.7 selenium-webdriver

我需要将文件上传自动化到使用一些JavaScript代码的网页。为此,我使用python selenium web驱动程序访问该网页。登录网页并浏览,直到文件必须上传的页面工作正常,但我无法弄清楚如何点击选择文件按钮。

这是代码的样子,直到我上传文件为止:

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();

这就是网页的样子: enter image description here

这是检查页面时的样子: enter image description here

我尝试了很多方法来“点击”“选择文件”按钮,但没有成功:

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()

我怀疑它与页面运行时带有一些javascript代码有关......任何帮助都将不胜感激!

1 个答案:

答案 0 :(得分:1)

即使您能够点击该按钮,您仍然无法使用selenium处理文件上传提示。因此,您不应该click()该按钮上传文件,而是将路径发送到文件:

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")