如何获取元素的随机ID?

时间:2016-01-20 10:19:23

标签: python selenium selenium-webdriver

我有一个情况,id总是随机改变, 所以我不能使用find_element_by_id

上面有一些divs

<div class="x-tree-view  x-fit-item x-tree-view-default x-unselectable" 
id="treeview-2234" 
tabindex="0" 
componentid="componentstree-1118"
 style="overflow: auto; 
margin: 0px; height: 443px; width: 228px;">


<div class="x-grid-item-container"
 style="width: 228px;
 transform: 
translate3d(0px, 0px, 0px);">

<table id="treeview-2234-record-879" 
       data-boundview="treeview-2234" 
       data-recordid="879" 
       data-recordindex="0" 
       class="x-grid-item x-grid-item-selected" 
       cellpadding="0" 
       cellspacing="0" 
       style="width:100%;">

我已经尝试过:

  • 使用recordid,但有时会重复记录。
  • 通过class_name,但有时会重复该类。
  • 当然是通过id,但正如我已经说过的,当页面刷新时,它会变成另一个id
  • 通过treeview-2234 root ...失败

我是EXt的另一个受害者,我该怎么办?

4 个答案:

答案 0 :(得分:1)

如果每次刷新页面时ID都不同,则无法按ID选择元素。相反,您需要找到一种方法来通过其他独特的东西来选择元素。这可以通过使用其中一个属性(data-boundviewdata-recordid,....),或通过HTML结构选择table元素的路径,该结构随时加载页面已刷新。

然后我会使用driver.find_element_by_xpath()来选择元素。例如,您可以按以下方式选择元素:

driver.find_element_by_xpath('//table[@data-boundview="treeview-2234"]')

或者,如果您了解HTML结构,则可以执行以下操作:

driver.find_element_by_xpath('//div[@id="ancestor-div"]/div[@id="parent-div"]/table')

答案 1 :(得分:1)

我会按照预期在dom上尝试 xpath 。您可能需要抓住更改dom 不更改父dom ,并通过xpath中的多种方式从中获取子项 -

使用contains功能 -

driver.find_element_by_xpath("//div[@class= 'x-grid-item-container']/table[contains(@data-boundview,'treeview-')]")

它会抓取所有data-boundviewtreeview-的{​​{1}}如果data-boundview的值treeview-更多,那么请尝试抓住不变父母首先然后深入挖掘它以获得孩子,如前所述。

答案 2 :(得分:1)

如果ur id随机变化,请使用未更改的类,如下所示:

driver.find_element_by_css_selector("div.x-tree-view.x-fit-item.x-tree-view-default.x-unselectable");

这将选择第一个div。要选择第二个div,请使用

driver.find_element_by_css_selector("div.x-grid-item-container");

如果表格在此div下,请尝试这样:

driver.find_element_by_css_selector("div.x-grid-item-container>table.x-grid-item.x-grid-item-selected");

答案 3 :(得分:0)

如果您的ID中shift = 5.5; Nw = floor(shift); shift_b = [zeros(1, Nw) 1]; shift_a = 1; Nf = mod(shift,1); alpha = -(Nf-1)/(Nf+1); fract_b = [alpha 1]; fract_a = [1 alpha]; %// now filter as a cascade . . . mag1s = filter(shift_b, shift_a, mag1); mag1s = filter(fract_b, fract_a, mag1s); 不变,则可以搜索包含它的ID:

id="treeview-2234"