【发布时间】:2021-07-02 15:25:41
【问题描述】:
我有一长串来自 HTML 页面的表格。以下只是列表的一小部分。
<ul id="exportContentTree" data-space-key="VAG" data-content-tree-src="/spaces/exportspacetree.action" data-content-tree-loaded="true">
<li class="content-tree-node">
<ul class="content-tree-node-children">
<li class="content-tree-node">
<input type="hidden" name="contentToBeExcluded" value="">
<input type="checkbox" name="contentToBeExported" class="exportContentTreeCheckbox" value="134258951" checked="checked">
<label class="label" for="contentToBeExported">
<a href="https://ewiki.abc.com/display/VAG/Getting+Started">Getting Started
</a>
</label>
</li>
</ul>
<ul class="content-tree-node-children">
<li class="content-tree-node">
<input type="hidden" name="contentToBeExcluded" value="">
<input type="checkbox" name="contentToBeExported" class="exportContentTreeCheckbox" value="137464227" checked="checked">
<label class="label" for="contentToBeExported">
<a href="https://ewiki.abc.com/display/VAG/Queue+Management">Queue Management
</a>
</label>
</li>
</ul>
<ul class="content-tree-node-children">
<li class="content-tree-node">
<input type="hidden" name="contentToBeExcluded" value="179758339">
<input type="checkbox" name="contentToBeExported" class="exportContentTreeCheckbox" value="179758339" checked="checked">
<label class="label" for="contentToBeExported">
<a href="https://ewiki.abc.com/pages/viewpage.action?pageId=179758339"># Archive #
</a>
</label>
</li>
</ul>
</li>
</ul>
我想检查<label>标签内<a>标签内的文字是否以#开头,表示内部内容。如果是这样,那么 Selenium 将不会选中元素正上方的复选框 <input type='checkbox'>。
在上面给出的代码中,在理想情况下,Selenium 应该选中“Getting Started”和“Queue Management”的复选框,而不是“#Archive#”的复选框
我使用了以下代码,以便 Selenium 可以遍历列表并选中所有复选框。
for topic in browser.find_elements_by_class_name('content-tree-node-children'):
topic_checkboxes = topic.find_elements_by_xpath('//*[@id="exportContentTree"]/li/*[@class="content-tree-node-children"]/li/*[@class="exportContentTreeCheckbox"]')
for checkbox in topic_checkboxes:
checkbox.click()
我试图在第二个for循环中添加一个if语句来检查标签之间包裹的链接文本是否以#开头,这不起作用:
for checkbox in topic_checkboxes:
if checkbox.find_element_by_xpath('//*[@id="exportContentTree"]/li/*[@class="content-tree-node-children"]/li/*[@class="exportContentTreeCheckbox"]/following-sibling::label/*').text.startswith('#') == False:
checkbox.click()
谁能告诉我哪里做错了?是 Xpath 表达式还是其他什么?
【问题讨论】: