ElementNotInteractableException:Element<>键盘无法访问

时间:2018-03-28 17:11:20

标签: python selenium selenium-webdriver sendkeys

Screenshot我正在尝试使用python中的selenium在maketime.io上传文件。

attach = driver.find_element_by_id('part_input_3d_10262')
attach.send_keys("filepath")

必须在以下元素中上传文件。

<input ng-show="false" id="part_input_3d_10262" name="part_input_3d" accept=".dxf,.step,.stp" ng-class="{ 'has-file': part.asset3d }" nv-file-select="" uploader="uploader3d" class="ng-hide" type="file">

当我运行代码时,它会给出:

ElementNotInteractableException: Element <> is not reachable by keyboard. 

我已尝试引入wait以确保在运行“attach.send_keys”之前完全加载页面。

看起来这个元素是隐藏的,这使得它无法访问。我无法弄清楚如何解决这个问题。我查看了其他类似问题的帖子,但仍然无法修复它。

2 个答案:

答案 0 :(得分:1)

使用javascript使元素首先可见

driver.execute_script('''
document.getElementById('part_input_3d_10262'‌​).className="ng-show"; 
''')

或试试这个

driver.execute_script('''
document.getElementById('part_input_3d_10262'‌​).setAttribute("ng-show", "true"); 
''')

答案 1 :(得分:0)

错误说明了一切:

attach = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@class='ng-hide' and starts-with(@id,'part_input_3d_') and @name='part_input_3d']")))
driver.execute_script("arguments[0].removeAttribute('class')", element)
driver.execute_script("arguments[0].setAttribute('ng-show','true')", element)
attach.send_keys("filepath")

根据 HTML 您共享的元素是 Angular Element 。首先,您必须引导WebDriverWait才能使元素可点击,然后删除属性 class 设置为 ng-hide ,并更改属性 ng-显示 true ,如下所示:

{{1}}