Python selenium,我该如何删除元素?

时间:2014-03-19 18:29:06

标签: javascript python selenium

我一直在尝试最后一小时删除元素而没有任何成功。元素只能通过类名来访问。 我试过了:

js = "var aa=document.getElementsByClassName('classname')[0];aa.parentNode.removeChild(aa)"
driver.execute_script(js)

我得到的错误是parentNode未定义。

那么使用Selenium删除元素的最佳方法是什么?

2 个答案:

答案 0 :(得分:15)

我不知道专门为删除元素而设计的Selenium方法。但是,你可以用:

element = driver.find_element_by_class_name('classname')
driver.execute_script("""
var element = arguments[0];
element.parentNode.removeChild(element);
""", element)
如果元素不存在,

find_element_by_class_name将引发异常。因此,您无需测试element是否设置为合理值。如果方法返回,则设置。然后将元素传递回execute_script。传递给Python中execute_script的参数在JavaScript中显示为arguments对象。 (它与您通常使用任何JavaScript函数获得的arguments对象相同。在幕后,Selenium将JavaScript代码包装在一个匿名函数中。)

或者您可以使用依赖JavaScript的解决方案来查找元素:

driver.execute_script("""
var element = document.querySelector(".classname");
if (element)
    element.parentNode.removeChild(element);
""")

如果您碰巧使用远程服务器运行测试(如Sauce Labs或BrowserStack),此解决方案好得多。 Selenium客户端和服务器之间的通信成本不可忽略。

答案 1 :(得分:5)

getElementByClassName不是document上的方法。您将要使用

getElementsByClassName('classname')[0]...

但是,只有当您确定它是唯一一个拥有该课程的人时。