首页 > 解决方案 > 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')]")

标签: seleniumselenium-webdriverxpathwebdriver

解决方案


根据您的问题和代码试验,大概变量nrstring类型。

因此,当您已将nr转换为inttype 时,接下来当您要将其附加到另一个 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
      

推荐阅读