在做web自动化,有一些特殊元素是在shadow-root节点下面的,如果通过常规的xpath或者其他的定位方式是定位不到对应元素的,比如下面的页面:
为什么shadow-root节点下的元素定位不到呢?
shadow-root是前端的特殊元素节点,其使用了一个叫做shadowdom的技术做了封装,shadowdom的作用可以理解为在默认的dom结构中又嵌套了一个dom结构(和iframe有点类似,只不过iframe内嵌的是html),内嵌的dom结构默认是隐藏的,所以我们如果想要在shadow-root底下的dom中定位元素,那么就需要进行切换。
1066vip威尼斯下载的解决方案:
使用javascript操作,打开f12调试窗口->进入console控制台
输入如下代码:
document.queryselector("wujie-app").shadowroot.queryselector('button[class="el-button"]')效果如下:
step1:先去找到shadow-root的宿主节点,对应的是wujie-app
step2:使用shadowroot方法进行切换
step3:在shadowdom中再通过定位方法进行元素查找
另一种傻瓜式1066vip威尼斯下载的解决方案
如果不知道javascript如何写,可以直接在元素上通过右键 -> copy -> copy js path:
同样也可以定位到对应元素。
在python中,通过selenium webdriver调用execute_script方法执行js代码即可:
driver.execute_script('document.queryselector("wujie-app").shadowroot.queryselector('button[class="el-button"]')')注意,字符串里面的单双引号嵌套的情况下需要进行转义。