如何通过python selenium与动态id进行交互?

时间:2017-10-09 13:32:24

标签: python-3.x selenium

我正在尝试点击网页中的图标。这是我试图点击的元素:

<a class="Button ButtonIcon IconOnly DataSelector NormalState" 
id="ze6402ef81ea54445aec5dab8790c781f" tabindex="0"><span class="Icon"></span>
<span class="Text"></span></a>

我与下面的代码交互没有问题:

browser.find_element_by_css_selector('ze6402ef81ea54445aec5dab8790c781f').click()

问题是每个会话的id都是动态的。我尝试使用以下代码解决方法但没有成功:

browser.find_element_by_xpath("//a[span/@class='Text']").click()

browser.find_element_by_xpath("//a[span/@class='Icon']").click()

之后,我注意到该元素需要处于悬停状态才能被点击。接下来,我使用ActionChains尝试模拟悬停状态 - 再次,没有成功:

actions=ActionChains(browser)
element=browser.find_element_by_css_selector("//a[span/@class='Icon']")
actions.move_to_element(element).click().perform()

然后,我尝试通过send_keys和ActionChains对元素进行TAB - 但它最终通过页面快速循环,而不是一次一个元素:

actions.send_keys(Keys.TAB)

我想在发布我的问题之前进行尽职调查。任何帮助表示赞赏 - 谢谢。

2 个答案:

答案 0 :(得分:1)

正如您所提到的,您对以下代码行没有任何问题:

browser.find_element_by_css_selector('ze6402ef81ea54445aec5dab8790c781f').click()

但这里唯一的问题是id是动态的,因此我们可以使用class属性构建一个唯一的cssSelector或一个唯一的xpath,如下所示:

  • cssSelector

    driver.findElement(By.cssSelector("div.Button.ButtonIcon.IconOnly.DataSelector.NormalState"));
    
  • xpath

    driver.findElement(By.xpath("//div[@class='Button ButtonIcon IconOnly DataSelector NormalState']"));
    

答案 1 :(得分:0)

使用这些XPath:

//span[@class='Text']
//span[@class='Icon']

您的格式不正确。