gpt4 book ai didi

python - 如何使用 Selenium 基于文本和类查找元素?

转载 作者:行者123 更新时间:2023-12-02 12:55:22 27 4
gpt4 key购买 nike

我有一个 html 表,我想根据文本以及它是否不包含某个类来查找 tbody 中的 td 元素。即使文本存在,它也应该忽略 thead 中的任何内容。

...

<div id="mytable">
<div>
<table>
<thead>
<tr>....</tr>
...
</thead>
<tbody>
<tr>
<td class="inactive">3</td>
<td>4</td>
</tr>
</tbody>
</table>
</div>
</div>

...

这是代码:

def do_click(user_input):
browser = webdriver.Firefox()
browser.get(url)

mytable_div = browser.find_element_by_id("mytable")
element = mytable_div.find_element_by_xpath("//div/table/tbody/td[contains(text()='%s')]" % user_input)

if element:
element.click()

因此,如果user_input = 3,则不应单击表格元素,因为即使存在文本,它的类也为inactive .

如果user_input = 4,则应该单击表格元素,因为它没有非事件类并且存在文本。

目前代码不起作用,因为我的 xpath 表达式无效,但我不确定检查类和文本的正确方法是什么。

最佳答案

您走在正确的道路上。 contains()是一个函数,需要传入 2 个参数 - 一个要查找的字符串和一个子字符串 - 要查找的内容。修正你的表情:

"//div/table/tbody//td[contains(text(), '%s')]" % user_input

在这种情况下,您还可以使用点代替 text()

并且,要检查该类是否处于非事件状态,请添加“不包含”检查:

"//div/table/tbody//td[contains(., '%s')][not(contains(@class, 'inactive'))]" % user_input

逻辑上,处理NoSuchElementException如果引发异常,则意味着未找到该元素,如果没有引发异常,请单击该元素:

from selenium.common.exceptions import NoSuchElementException

try:
element = mytable_div.find_element_by_xpath("//div/table/tbody//td[contains(., '%s')][not(contains(@class, 'inactive'))]" % user_input)
element.click()
except NoSuchElementException:
print("Element not found")

关于python - 如何使用 Selenium 基于文本和类查找元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38537223/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com