如何使(style =“ display:none;”)元素在python硒中的HTML中可见?

Jay*_*ant 1 html python selenium

我正在尝试在网站上使用python硒上传文件,该网站的html中的文件字段如下所示:

 <div id="fallback" style="display: none;">
    <input id="upload-input" type="file" name="file" multiple="multiple">
    <div id="upload-progress" class="upload-progress"></div>
  </div>
Run Code Online (Sandbox Code Playgroud)

我试图通过以下代码使元素可见:

elem = driver.find_element_by_xpath("//input[@id='upload-input']")
driver.execute_script("arguments[0].removeAttribute('style')", elem)
elem = driver.find_element_by_xpath("//input[@id='upload-input']")
Run Code Online (Sandbox Code Playgroud)

运行脚本后,脚本将停止,而不会上传文件并且不会引发任何错误。

使用elem.is_displayed()之后,即使运行上述代码块,我仍然发现该元素仍未显示。

Ian*_*nce 6

style属性在包装上<div>,但是您尝试将其从中删除<input>

container = driver.find_element_by_id("fallback")
driver.execute_script("arguments[0].style.display = 'block';", container)

input = driver.find_element_by_id("upload-input")
input.send_keys(path_to_file)
Run Code Online (Sandbox Code Playgroud)

PS的使用的style属性是的实现细节如何元件被样式。在这种情况下,您实际上只关心样式是什么,因此最好将样式专门设置为所需样式,而不是删除实现它的特定方法。前者应不那么脆弱。

PPS您可能不需要使用XPath进行像通过ID查找一样简单的操作。(ID在所有元素上都应该是唯一的;否则,它们并不是真正的ID。)