如何使用Selenium找到随机的Xpath?

时间:2018-07-02 05:36:41

标签: python html selenium selenium-webdriver xpath

我是Selenium中的新手,并使用python进行构建。最近,我发现了一个问题,想问一个可以帮助我解决这个问题的人。问题是我想要获取的Xpath是随机的,例如:

  

'// * [@ id =“ wiki-edit-wikiEdit26”] / div / div / div / div [2] / a [1]'

     

'// * [@ id =“ wiki-edit-wikiEdit27”] / div / div / div / div [2] / a [1]'

     

'// * [@ id =“ wiki-edit-wikiEdit28”] / div / div / div / div [2] / a [1]'

这三个xpath用于同一按钮,但是WikiEdit之后的数字将每次更改。因此,有什么方法可以帮助我更流畅地运行脚本?非常感谢你!

这是我的python代码:

broswer.find.element_by_xpath('//*[@id="wiki-edit-wikiEdit26"]/div/div/div/div[2]/a[1]') .click() 

3 个答案:

答案 0 :(得分:1)

您可以在xpath中使用matches

broswer.find.element_by_xpath("//*[matches(@id, '^(wiki-edit-wikiEdit)[0-9]')]/div/div/div/div[2]/a[1]") .click() 

因此基本上与ID匹配的内容以wiki-edit-wikiEdit开头,后跟数字[0-9]

答案 1 :(得分:0)

您只需要格式化字符串即可。

import random
# Random range 1 - 100
x = random.randint(1,100)

broswer.find.element_by_xpath(f'//*[@id="wiki-edit-wikiEdit{x}"]/div/div/div/div[2]/a[1]') .click()

答案 2 :(得分:0)

您可以使用starts-withcontains

broswer.find.element_by_xpath("//*[contains(@id,'wiki-edit-wikiEdit')]/div/div/div/div[2]/a[1]").click()

此外,不建议使用这么长的xpath。在css-selectors上使用xpath