我需要将文件上传自动化到使用一些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();
我尝试了很多方法来“点击”“选择文件”按钮,但没有成功:
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代码有关......任何帮助都将不胜感激!
答案 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")