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”之前完全加载页面。
看起来这个元素是隐藏的,这使得它无法访问。我无法弄清楚如何解决这个问题。我查看了其他类似问题的帖子,但仍然无法修复它。
答案 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}}