javascript - 检查树是否展开或打开(Selenium / Python)
问题描述
我想弄清楚 Selenium 如何检查树是否打开/扩展以及是否成功。
例如,我们有这些代码行,这是父级(使用元素面板的 DOM 视图)。这是开着的树: 树开着
通过使用控制台选项卡,我看到了这一点,我认为这可能很有用......但我真的不知道如何使用 [ opened: true
]获取状态
li_attr: {id: "j1_1"}
original: {was_excel_sheet: false, item_name: "Profit and Loss", text: "01
Profit and Loss", mapped: false, initial_order: "01", …}
parent: "#"
parents: ["#"]
state: {loaded: true, opened: true, selected: true, disabled: false}
text: "01 Profit and Loss"
type: "root"
关闭树: 树关闭
解决方案
好吧,我想我们明白了。
我用过漂亮的汤 - https://pypi.org/project/beautifulsoup4/ - 我们用它来浏览 html 的类。
一旦 selenium 加载了页面,抓取 html 并使用漂亮的汤将它变成我们可以使用的东西 - 下面是一个如何做到这一点的小例子
from bs4 import BeautifulSoup
html = driver.page_source
soup = BeautifulSoup(html, 'lxml')
鉴于我没有 html,我制作了一些与您上传的图像匹配的小版本,下面是“jstree-open”类已知的开放行项目。
open = '''
<div id="tree" class="jstree jstree-1">
<ul class="jstree-container-ul jstree-children">
<li class="jstree-node jstree-last jstree-open">
</li>
</ul>
</div>
'''
open_soup = BeautifulSoup(open)
使用 css 选择器,我们可以获得 li 的所有类名:
classes_of_open_li = open_soup.select('div#tree ul.jstree-container-ul li')[0].get('class')
print(classes_of_open_li)
out: ['jstree-node', 'jstree-last', 'jstree-open']
然后我们可以测试看看 'jstree-open' 是否是这些类之一:
'jstree-open' in classes_of_open_li
out: True
然后我们可以测试相反的情况:
closed = '''
<div id="tree" class="jstree jstree-1">
<ul class="jstree-container-ul jstree-children">
<li class="jstree-node jstree-last jstree-closed">
</li>
</ul>
</div>
'''
closed_soup = BeautifulSoup(closed)
classes_of_closed_li = closed_soup.select('div#tree ul.jstree-container-ul li')[0].get('class')
'jstree-open' in classes_of_closed_li
out: False
之后,您想选择所有列表项,您可以使用相同的函数返回所有列表项的列表:
li = '''
<div id="tree" class="jstree jstree-1">
<ul class="jstree-container-ul jstree-children">
<li class="jstree-node jstree-last jstree-closed">
<ul>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>
</li>
</ul>
</div>
'''
line_soup = BeautifulSoup(li)
all_line_items = line_soup.select('div#tree ul.jstree-container-ul li ul li')
out: [<li></li>, <li></li>, <li></li>, <li></li>]
希望这可以帮助!
推荐阅读
- mysql - 如何将表 postgres 从 docker 导出到本地 macos
- python - 类型对象'multichoice'没有属性'_default_manager'
- docker - 在ubuntu中安装docker并启动问题
- python - 为什么使用 py2app 模块创建 mac 文件时出现错误?
- javascript - 最初打开下拉列表的第三项并允许它在单击时关闭
- angular - 在 Ionic/Angular 中清除导航历史
- android-permissions - 如何在android 10及以上版本中请求存储权限?
- android - Android 中的 Facebook Audience Network 竞价集成
- swift - Xcode Storyboard 文件显示源代码控制差异界面
- postman - 在 Postman 中创建新请求时可以自动设置变量吗?