元素在 Splinter (Selenium) 中不可见

Element is not visible with Splinter (Selenium)

提问人:Tobias Hüske 提问时间:8/2/2017 最后编辑:Mohsin AwanTobias Hüske 更新时间:9/1/2019 访问量:518

问:

填写表格后,我尝试单击以下提交按钮:

<div class="tl_formbody_submit">
   <div class="tl_submit_container">
     <input type="submit" class="tl_submit" value="Einstellungen speichern" onclick="Backend.getScrollOffset()">
</div>

代码为:

browser.find_by_xpath('//input[@class="tl_submit"]').click()

堆栈跟踪说,元素不可见 - 但为什么呢?

谢谢!

Python Selenium 自动化 分裂 chrome-web-driver

评论

0赞 ksai 8/2/2017
提供 Python 代码
0赞 kparker 8/2/2017
也许之前尝试过等待功能,看看是否有不同
0赞 Gaurang Shah 8/2/2017
因为该元素不可见。在这条线之前稍等一下怎么样。

答:

0赞 Gaurang Shah 8/2/2017 #1

如果堆栈跟踪说元素不可见,则表示当您尝试查找它时它不可见。

可能是某些操作需要使其可见(某些 AJAX 请求),或者您可能只需要等待一段时间即可单击它。

您可以使用显式等待,如下所述。

submit_button = WebDriverWait(driver, 30).until(EC.visibility_of_any_elements_located((By.XPATH, "//input[@class='tl_submit']")))
submit_button.click()

评论

0赞 Tobias Hüske 8/2/2017
等待了 10 秒钟,它也不起作用。表单是数据库凭据 (download.contao.org/3.5.28/zip)。
0赞 Gaurang Shah 8/2/2017
增加超时。
0赞 Tobias Hüske 8/2/2017
不工作... :/认为等待不是解决方案,它需要特殊的“黑客”......
0赞 Tobias Hüske 8/2/2017
github.com/contao/core/blob/......这是安装文件
1赞 KickAds 9/1/2019 #2
# import options 
import selenium
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By

# desired url link 
URL = 'www.path.com'

#driver & settings 
driver = webdriver.Chrome('PATH TO CHROMEDRIVER.EXE')
driver.get('URL')
driver.delete_all_cookies

#find element & click 
driver.find_element_by_id("Einstellungen speichern").click()

评论

0赞 Giulio Caccin 9/1/2019
虽然此代码可以回答该问题,但提供有关此代码为什么和/或如何回答该问题的其他上下文可以提高其长期价值。
0赞 Abanish Tiwari 9/1/2019 #3

元素“不可见”的原因之一是由于分配 xpath 时出错。最好的方法是从 html(inspect 元素)复制 xpath 并粘贴它。它适用于大多数情况,请尝试一下。

您可以查看下面的链接,我也遇到了类似的问题,可能的解决方案可以在这里,但对我来说,上述解决方案很好。如何修复Python中的“元素不可交互”Selenium错误?

评论

0赞 Mohammad Reza Shahrestani 9/1/2019
试着解释你在答案中写的链接是什么。
1赞 Abanish Tiwari 9/1/2019
@MohamadShahrestani我遇到了类似的问题,可能会在那里找到解决方案。上面也提到了我的情况的正确答案。