2017-05-04 75 views
0

我试图从该页面的方法: Upload file with Selenium in Python上传文件

代码:

file_button = browser.find_element_by_id('fileUploadProxy') 
file_button.send_keys('/Users/home/Downloads/1-Students-and-Parent-Email.csv') 

,但我得到了以下错误:

Traceback (most recent call last): 
    File "test.py", line 110, in <module> 
    upload_students_results('Surname, Name') 
    File "test.py", line 91, in upload_students_results 
    file_button.send_keys('/Users/home/Downloads/1-Students-and-Parent-Email.csv') 
    File "/Library/Python/2.7/site-packages/selenium/webdriver/remote/webelement.py", line 349, in send_keys 
'value': keys_to_typing(value)}) 
    File "/Library/Python/2.7/site-packages/selenium/webdriver/remote/webelement.py", line 493, in _execute 
return self._parent.execute(command, params) 
    File "/Library/Python/2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 249, in execute 
self.error_handler.check_response(response) 
    File "/Library/Python/2.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 193, in check_response 
raise exception_class(message, screen, stacktrace) 
selenium.common.exceptions.WebDriverException: Message: unknown error: cannot focus element 
    (Session info: chrome=58.0.3029.96) 
    (Driver info: chromedriver=2.29.461585 (0be2cd95f834e9ee7c46bcc7cf405b483f5ae83b),platform=Mac OS X 10.12.4 x86_64) 
+0

请在HTML中表示具有id =“fileUploadProxy”的元素。 – alecxe

+0

@alecxe

Choose File
Phil

回答

1

的问题是 - 您正在向不是“可交互”的div元素发送密钥,不接受密钥 - 因此“无法聚焦元素”错误。

你链接的解决方案背后的想法是发送键与type="file"input元素是负责文件上传。在你的HTML中找到这个元素并发送密钥。

请注意,此元素可能不可见。在这种情况下,您应该首先使用make it visiblesend_keys()工作。


更新:

好了,现在我们至少知道哪个元素是我们所期望的一个:

<input type="file" name="fileToUpload" id="fileToUpload2" class="fileToUpload"> 

既然你有麻烦定位此元素,可尝试waiting for it

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


file_upload = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "fileToUpload2")) 
) 
file_upload.send_keys('/Users/home/Downloads/1-Students-and-Parent-Email.csv') 

或/和,che ck如果此元素在iframe之内 - 如果是,则需要切换到iframe的上下文,然后才执行元素搜索。

+0

我想我发现它''所以我改变了代码>''file_button = browser.find_element_by_id(' fileToUpload2')'但它仍然抛出一个错误?还尝试添加.click()。 – Phil

+0

@Phil现在抛出哪个错误?元素是可见/可编辑的吗? – alecxe

+0

当前错误A部分>'文件'test.py“,第88行,在upload_students_results中 file_button = browser.find_element_by_id('fileToUpload2') File”/Library/Python/2.7/site-packages/selenium/webdriver/remote/ webdriver.py“,第282行,在find_element_by_id 返回self.find_element(by = By.ID,value = id_) 文件”/Library/Python/2.7/site-packages/selenium/webdriver/remote/webdriver.py“ ,第784行,在find_element中 'value':value})['value'] ' – Phil