我正在尝试点击网页中的图标。这是我试图点击的元素:
<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)
我想在发布我的问题之前进行尽职调查。任何帮助表示赞赏 - 谢谢。
答案 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']
您的格式不正确。