我使用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">
所以两个底部框中的项目是相同的。顶部的那个是不同的。我想在第二个框中选择项目。
答案 0 :(得分:0)
我不确定基于这样的html
结构自动化场景会有多容易。我建议你与开发人员交谈,看看他们是否可以为每个父div
添加某种ID,否则选择器会太脆弱。我还看到data-id
属性在每种情况下都是唯一的,因此如果您事先知道这些ID,那么这可能是您最好的选择。如果您没有任何其他选项,那么css nth-child()
函数是下一个最可靠的机制。但是,在这种情况下,你必须知道父母。 nth-child()
已经很好地解释了here
另一方面,如果打算找到第二个data-slot
,您可以使用以下xpath
:
//div[@data-slot='primary'][2]