Python-Selenium"输入类型文件"上载

时间:2018-03-14 10:15:44

标签: python selenium

我尝试使用python和selenium将文件上传到网站。我尝试了以下方法

driver = webdriver.Firefox()
driver.get("ip-address")

方法1:

test = driver.find_element_by_id("selectedFile")
test.send_keys('/Users/knightfox/Desktop/file.txt')

方法2:

test = driver.find_element_by_xpath("//input[@type='file']")
test.send_keys('/Users/knightfox/Desktop/file.txt')

方法3:

test = driver.find_element_by_css_selector('input[type="file"]')
test.send_keys(r'/Users/knightfox/Desktop/file.txt')

但是我在执行时会遇到以下错误。

Traceback (most recent call last):
  File "/home/knightfox/Desktop/bell/sel.py", line 18, in <module>
    test.send_keys(r/Users/knightfox/Desktop/file.txt)
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webelement.py", line 479, in send_keys
    'value': keys_to_typing(value)})
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webelement.py", line 628, in _execute
    return self._parent.execute(command, params)
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 312, in execute
    self.error_handler.check_response(response)
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.ElementNotInteractableException: Message: Element <input id="selectedFile" name="file" type="file"> is not reachable by keyboard

我使用的是Python 2.7。以下是html页面。

enter image description here

更新

Ian的代码解决了这个问题。

field = driver.find_element_by_id("selectedFile")
driver.execute_script("arguments[0].style.display = 'block';", field)
field = driver.find_element_by_id("selectedFile")
field.send_keys('/Users/knightfox/Desktop/file.txt')

1 个答案:

答案 0 :(得分:0)

文件字段由style="display: none;"隐藏。在与它进行交互之前,您需要使其可见。

field = driver.find_element_by_id("selectedFile")
driver.execute_script("arguments[0].style.display = 'block';", field)
field.send_keys('/Users/knightfox/Desktop/file.txt')