什么是唯一标识符以及如何使用它来选择?

时间:2015-06-03 20:15:21

标签: python python-2.7 selenium selenium-webdriver element

我使用Selenium,我正在尝试在网站上自动执行任务,并且为了选择我必须使用的项目:

select = driver.find_element_by_*whatever* 

但是,所有 whatevers ,如find_element_by_id,按名称,按标签名称等都不可用或由多个项目共享。每个项目似乎唯一的唯一一个是“数据ID”号,但据我所知,没有find_element_by_data_id函数。

我可以获得一个如下所示的唯一标识符:

div.item:nth-child(453)

它似乎适合,因为当我重新加载页面时它不会改变,并且只对一个项目是唯一的。

如何使用此唯一标识符来选择对象?或者,您能否建议一种如何选择所需项目的方法?

以下是与该对象有关的HTML:

    ...
</div>
<div data-id="3817366931"
     data-slot="secondary"
     data-classes="pyro"
     data-content="Level: 30<br/>"
     data-appid="440"
     class="item hoverable quality6   app440"
     style="opacity:1;background-image:url(https://steamcdn-a.akamaihd.net/apps/440/icons/c_drg_manmelter.b76b87bda3242806c05a6201a4024a560269e805.png);"
     data-title="Manmelter"
     data-defindex="595">
</div>
<div data-id="3820690816"
     data-slot="primary"
     data-classes="pyro"
     data-content="Level: 10<br/>"
     data-appid="440"
     class="item hoverable quality6   app440"
     style="opacity:1;background-image:url(https://steamcdn-a.akamaihd.net/apps/440/icons/c_drg_phlogistinator.99b83086e28b2f85ed4c925ac5e3c6e123289aec.png);"
     data-title="Phlogistinator"
     data-defindex="594">
</div>
<div data-id="3819377317"
     data-slot="primary"
     data-classes="pyro"
     data-content="Level: 10<br/>"
     data-appid="440"
     class="item hoverable quality6   app440"
     style="opacity:1;background-image:url(https://steamcdn-a.akamaihd.net/apps/440/icons/c_drg_phlogistinator.99b83086e28b2f85ed4c925ac5e3c6e123289aec.png);"
     data-title="Phlogistinator"
     data-defindex="594">

所以两个底部框中的项目是相同的。顶部的那个是不同的。我想在第二个框中选择项目。

1 个答案:

答案 0 :(得分:0)

我不确定基于这样的html结构自动化场景会有多容易。我建议你与开发人员交谈,看看他们是否可以为每个父div添加某种ID,否则选择器会太脆弱。我还看到data-id属性在每种情况下都是唯一的,因此如果您事先知道这些ID,那么这可能是您最好的选择。如果您没有任何其他选项,那么css nth-child()函数是下一个最可靠的机制。但是,在这种情况下,你必须知道父母。 nth-child()已经很好地解释了here

另一方面,如果打算找到第二个data-slot,您可以使用以下xpath

//div[@data-slot='primary'][2]