如何在selenium(python)中处理动态xpath



我正在自动化一个网站,我有几个6位数的数字(例如-11111222222333333(

如果我取111111(在for循环内(并识别路径:

driver.find_element_by_xpath("//a[@class='button' and @title='Create Work Item Copy']").click()

第一次它能够找到它并点击它,但当循环第二次运行时,以此类推(对于222222333333,…n(,我得到:

消息:没有这样的元素:无法定位元素:{"方法":"xpath","选择器":"//a[@class='button'和@title='创建工作项副本"]"}

上面的错误消息是针对我想要点击的按钮,在检查"检查元素"时,

我发现循环每次迭代的"id"都在变化。

<span class="jazz-ui-toolbar-Button" **id="jazz_ui_toolbar_Button_16"** widgetid="jazz_ui_toolbar_Button_16" style=""><a class="button" dojoattachpoint="titleNode,focusNode" href="#" dojoattachevent="onclick:_onClick,onkeypress:_onKeyPress" role="button" title="Create Work Item Copy" aria-disabled="false" tabindex="-1"><img src="/ccm/web/dojo/resources/blank.gif?etag=azf6UBC" class="button-img sprite-image-15" alt="Create Work Item Copy"><span class="button-label" dojoattachpoint="_label" style="display:none"></span></a>

在上面的HTML中,对于for循环的第一次迭代,"id"是id="jazz_ui_toolbar_Button_16"是16,但对于第二次迭代,这个16将在for循环的第二次循环中变成一些随机数,依此类推

因此,我得到了错误。

我试过使用绝对的xpath,没有用。请帮忙。

如果你需要更多信息,请告诉我。

使用contains函数:

driver.find_element_by_xpath("//span[contains(@id, 'jazz_ui_toolbar_Button_')]").click()

*更新

如果有多个元素,可以在最后一个xpath中使用序列[number],如下所示:

driver.find_element_by_xpath("(//span[contains(@id, 'jazz_ui_toolbar_Button_')])[1]").click()

或者使用.find_elements:

elements = driver.find_elements_by_xpath("//span[contains(@id, 'jazz_ui_toolbar_Button_')]")
#elements[index].click()
elements[0].click()

上面提到的是第一个元素。

相关内容

  • 没有找到相关文章