当我用firebug检查元素时,它显示如下:
<a onclick="viewmodel.view_results(false);" href="#">Create new challenge</a>
为此,我编写了使用Xpath,Href来识别元素的代码。
但是Webdriver
无法识别元素。
你们有没有人建议我如何在python中编写代码来识别这些元素?
答案 0 :(得分:2)
尝试使用xpath "//a[text()='Create new challenge')]"
答案 1 :(得分:1)
我强烈建议不要使用YuvarajHK去过的路线。 Xpath很多slower and much less readable than CSS
相反,使用CSS。所以这里的问题是,没有一个属性可以匹配。在onclick
或href
上进行匹配并不聪明,因此在CSS方面只有一个选项。我强烈推荐 ...
使用父子层次结构来唯一标识您的元素。
所以,你的元素有一个父元素。而不是在另一个答案中给出的xpath在文本上匹配非常低效,而是找到该特定元素的父级。
请考虑以下事项:
<div id="newChallenge">
...
<a onclick="viewmodel.view_results(false);" href="#">Create new challenge</a>
...
</div>
所以第一步是找到elemnt的父级。如果元素的父元素没有ID,那就没问题。再上一层楼。
在我们的案例中:我们的父选择器为div#newChallenge
,我们链接的选择器只是a
。
我们的CSS选择器将是
div#newChallenge a
(或)
div#newChallenge > a
(取决于a
是否是后代 - 而不是子项)
此外,如果您有多个链接:
<div id="newChallenge">
<a href="someOtherPage.html">Hi</a>
<a onclick="viewmodel.view_results(false);" href="#">Create new challenge</a>
<a onclick="viewmodel.view_results(false);" href="#">Create something else</a>
</div>
您可以看到我们的选择器div#newChallenge a
无法唯一标识我们的元素。因此,让我们找到链接的索引。在这种情况下,我们要选择的链接索引为2
,因为......
<div id="newChallenge">
(1) <a href="someOtherPage.html">Hi</a>
-> (2) <a onclick="viewmodel.view_results(false);" href="#">Create new challenge</a>
(3) <a onclick="viewmodel.view_results(false);" href="#">Create something else</a>
</div>
然后,我们可以添加CSS伪类:nth-of-type
(或者甚至是其他:nth-*
伪类)
你的最终选择器可能是
div#newChallenge a:nth-of-type(2)
总结:您将用于在 python 中查找元素的代码为:
driver.find_elements_by_css_selector('div#newChallenge a:nth-of-type(2)');
答案 2 :(得分:0)
CSS = A [的onclick * =&#39; viewmodel.view_results(假)&#39;]
请告诉我上面的CSS Selector是否正常工作。