2017-05-04 70 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