【问题标题】:Upload a File using Python Selenium in Javascript Web在 Javascript Web 中使用 Python Selenium 上传文件
【发布时间】:2017-05-18 15:13:24
【问题描述】:

我需要自动将文件上传到使用一些 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 代码运行的事实有关...任何帮助将不胜感激!

【问题讨论】:

    标签: python-2.7 selenium-webdriver


    【解决方案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")
    

    【讨论】:

    • 感谢您的帮助@Andersson!但问题是我收到一条消息说无法找到此元素:NoSuchElementException: no such element: Unable to locate element: {"method":"xpath","selector":"//input[@type="file"]"} (Session info: chrome=55.0.2883.87) (Driver info: chromedriver=2.27.440175 (9bc1d90b8bfa4dd181fbbf769a5eb5e575574320),platform=Linux 4.4.0-57-generic x86_64) 这与我尝试的其他方法相同的问题,Selenium 无法找到元素。
    • 检查更新的答案。还要检查表单是否不在<iframe>
    • 我没工作,表在<iframe>:<iframe id="principal" name="principal" frameborder="0" style="position: absolute; overflow: auto; top: 106px; left: 0px; width: 100%; height: 884px; border: 0px;" src="prevision.do?method=obtenerListadoPrevisiones"> </iframe>
    猜你喜欢
    • 2012-01-15
    • 2021-02-08
    • 2021-02-21
    • 2017-10-02
    • 2018-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多