2017-10-09 66 views
1

我试图点击网页中的一个图标。这是我试图单击元素:如何通过蟒蛇硒动态ID互动?

<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() 

于是,我试图TAB通过send_keys和ActionChains元素 - 但最终通过快速地循环页,而不是一次一个元素:

actions.send_keys(Keys.TAB) 

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

+0

您可以更新与一对夫妇的ID的示例值的问题(例如, 'ze6402ef81ea54445aec5dab8790c781f')哪些产生? – DebanjanB

+0

#zfaf974d8e18d44cc9bfdd942643b200d,#z134860f30a964156aea8d63f98a10cee,#z978fad99632e4f44a54e67a3cae4c935 – MrGlass

+1

请张贴的链接页面。我们需要更多周围的HTML来给出答案。 – JeffC

回答

0

使用这些XPath:

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

此致是格式不正确。

+0

这里是我刚刚进入代码 - 在结果没有改变:‘点击()“browser.find_element_by_xpath(“//跨度[@类=’文字]”当我使用‘图标’,而不是‘文本’。 ,它点击页面上的不同元素。 – MrGlass

+0

这意味着你有图标的类名多跨元素。我不知道它是与文本相同。尝试使用以下格式来选择具有类值的第二个跨度:“(// span [@ class ='Text])[2]” – JOberloh

+0

我输入了以下内容:browser.find_element_by_xpath(“(// span [@class ='文本])[2]“)。我收到此错误:SyntaxError:该表达式不是一个合法的表达式。 – MrGlass

0

正如你所说,你没有与下面的代码行的一个问题:

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']"));