selenium - Selenium:在 XPath 中循环
问题描述
我正在尝试将一个元素循环到 Selenium 中,但它不起作用。特别是,我需要 y 更改如下:row0, row1, row2
等...
for i in range(0, int(nr)):
y='row'+ "(nr)"
elems = browser.find_element_by_xpath("//tr[contains(@class, y]").text
browser.find_element_by_class_name('nxt').click()
我已经找到了一个解决方案,但它根本不可靠,没有把"contains"
我包括"starts-with"
在寻找所有以行开头的元素:
elems = browser.find_elements_by_xpath("//tr[starts-with(@class, 'row')]")
解决方案
根据您的问题和代码试验,大概变量nr是string
类型。
因此,当您已将nr转换为int
type 时,接下来当您要将其附加到另一个 srtingrow
时,您必须再次转换回string
。
示例代码:
nr="5" for i in range(0, int(nr)): y='row'+str(i) print(y)
控制台输出:
row0 row1 row2 row3 row4
y
现在您可以轻松地在xpath中使用该变量。
最后,在没有相关HTML的情况下,很难猜测属性 class
的形成。但是最好的用法如下:
starts-with()
:starts-with()
如果class
属性包含开头的文本 row0则使用。例子:
class="row0MCat"
执行:
elems = browser.find_element_by_xpath("//tr[starts-with(@class='%s')]" %(y)).text
contains()
:contains()
如果属性在中间或末尾class
包含文本 row0 ,则使用。例子:
class="Mrow0Cat", class="MCatrow0"
执行:
elems = browser.find_element_by_xpath("//tr[contains(@class='%s')]" %(y)).text
推荐阅读
- terraform - 如何在 terraform 中断开远程执行?
- arduino - 使用 Mozzi 库在 Arduino IDE 中编译错误
- php - Laravel CustomRequest 授权,传递请求数据以验证 auth 用户 customer id 和 model id 匹配
- sql - 将磅和盎司转换为克 - SQL Server
- java - Spring Boot JOOQ 集成 - 编译问题
- java - Cannot get the max value in a SQLite database
- spring-boot - How to generate csr for a spring boot application
- java - 如何使用 Lombok 将字符串设置器自定义为大写?
- python - How do I create a temporary ZIP in Python 3.x using pyminizip?
- javascript - 是什么导致我的 Javascript 游戏在其他计算机上表现不同?