如何在python selenium中的HTML中显示(style =" display:none;")元素?

时间:2018-03-15 18:45:27

标签: python html selenium

我试图在一个网站上使用python selenium上传文件,该网站的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>

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

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']")

运行脚本后,脚本会在不上传文件的情况下停止,并且不会抛出任何错误。

使用elem.is_displayed()之后,我发现即使在运行上面的代码块之后元素仍然没有显示。

1 个答案:

答案 0 :(得分:3)

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)

P.S。使用style属性是如何元素样式的实现细节。在这种情况下,您真的只关心样式的,所以最好将设置更好地设置为您想要的而不是删除特定的实施的方式。前者应该不那么脆弱。

P.P.S。您可能不需要像使用ID查找一样简单地使用XPath。 (ID应该在所有元素中都是唯一的;否则它们不是真正的ID。)