Cap*_*eow 14 javascript python selenium
我一直在尝试最后一小时删除一个元素没有任何成功.元素只能通过类名来访问.我试过了:
js = "var aa=document.getElementsByClassName('classname')[0];aa.parentNode.removeChild(aa)"
driver.execute_script(js)
Run Code Online (Sandbox Code Playgroud)
我得到的错误是parentNode未定义.
那么使用Selenium删除元素的最佳方法是什么?
Lou*_*uis 16
我不知道专门为删除元素而设计的Selenium方法.但是,你可以用:
element = driver.find_element_by_class_name('classname')
driver.execute_script("""
var element = arguments[0];
element.parentNode.removeChild(element);
""", element)
Run Code Online (Sandbox Code Playgroud)
find_element_by_class_name如果元素不存在,将引发异常.所以你不必测试是否element设置为合理的值.如果方法返回,则设置.然后你将元素传递回去execute_script.execute_script在Python中传递的参数在JavaScript中作为arguments对象出现.(它与arguments您通常使用任何JavaScript函数获得的对象相同.在幕后,Selenium将JavaScript代码包装在一个匿名函数中.)
或者您可以使用依赖JavaScript的解决方案来查找元素:
driver.execute_script("""
var element = document.querySelector(".classname");
if (element)
element.parentNode.removeChild(element);
""")
Run Code Online (Sandbox Code Playgroud)
如果您碰巧使用远程服务器来运行测试(如Sauce Labs或BrowserStack),则此解决方案要好得多.Selenium客户端和服务器之间的通信成本不可忽略.
getElementByClassName不是方法document.你会想要使用
getElementsByClassName('classname')[0]...
Run Code Online (Sandbox Code Playgroud)
但只有你确定它是唯一一个有这个班级的人.
| 归档时间: |
|
| 查看次数: |
13639 次 |
| 最近记录: |