使用 aria-label 通过 Python3 和 Selenium 定位和单击元素

Posted

技术标签:

【中文标题】使用 aria-label 通过 Python3 和 Selenium 定位和单击元素【英文标题】:Using aria-label to locate and click an element with Python3 and Selenium 【发布时间】:2018-03-22 01:04:03 【问题描述】:

我想分别点击或更多,展开“任何时候”按钮。我试图通过 class_name 和 xpath 来定位元素。问题是类和 xpath 对于所有三个“选项”都是相同的。因此,我想使用 aria-label 选择并单击或展开该元素。我找到了一些建议,但对我没有用。最重要的是,我尝试在 python 3 中做到这一点。我也尝试过:

driver.find_element_by_xpath(""" //div*[@aria-label='Any Time'] """).click()

但它不起作用。

谁能帮帮我?非常感谢!

<div class="hdtb-mn-hd" aria-haspopup="true" role="button" tabindex="0" aria-label="Any country"><div class="mn-hd-txt">Any country</div><span class="mn-dwn-arw"></span></div>
<div class="hdtb-mn-hd" aria-haspopup="true" role="button" tabindex="0" aria-label="Any time"><div class="mn-hd-txt">Any time</div><span class="mn-dwn-arw"></span></div>
<div class="hdtb-mn-hd" aria-haspopup="true" role="button" tabindex="0" aria-label="All results"><div class="mn-hd-txt">All results</div><span class="mn-dwn-arw"></span></div>

【问题讨论】:

【参考方案1】:

所以,过去几天我一直在为此苦苦挣扎,事实证明这是一个巨大的头痛。 aria-label 基本上是唯一可靠的属性,xpath 解决方案对我不起作用。

一时兴起,我尝试使用:

driver.find_elements_by_css_selector("[aria-label=XXXX]")

其中 XXXX 是我在单引号中搜索的 aria 标签(例如“[aria-label='More']”)。像魅力一样工作。

说了这么多,尝试使用css选择器。它正常工作。

【讨论】:

你可能需要引用这个,即find_element(s)_by_css_selector("element[property='foo']")。使用div 例如:...selector("div[aria-label='XXXX']")【参考方案2】:

使用aria-label 属性,您可以尝试以下xpath

driver.find_element_by_xpath("//div[@aria-label='Any time']/div[@class='mn-hd-txt' and text()='Any time']");

driver.find_element_by_xpath("//div[@aria-label='Any time']/div[@class='mn-hd-txt'][text()='Any time']");

如果使用aria-label 属性不是强制性要求,您可以使用以下内容:

driver.find_element_by_xpath("//div[@class='hdtb-mn-hd']/div[@class='mn-hd-txt' and text()='Any time']");

driver.find_element_by_xpath("//div[@class='hdtb-mn-hd']/div[@class='mn-hd-txt'][text()='Any time']");

【讨论】:

非常感谢您的回复,@DebanjanB!您的所有建议都有效,但是,我仍然无法单击它,或者分别展开它。我收到以下错误消息:Message: unknown error: Element &lt;div class="mn-hd-txt"&gt;...&lt;/div&gt; is not clickable at point (306, 99). Other element would receive the click: &lt;a class="q qs" href="/search?q=ISIS+OR+IS+OR+%22Islamic+State%22&amp;amp;dcr=0&amp;amp;source=lnms&amp;amp;tbm=isch&amp;amp;sa=X&amp;amp;ved=0ahUKEwjYy56A4OrWAhWFDMAKHVG9BDAQ_AUICygC"&gt;...&lt;/a&gt; 任何想法如何解决这个问题?提前致谢! 对于Element is not clickable at point (x, y),请参见Discussion / QA 对于那些试图为其他事情做同样事情的人......另一个例子; tags = driver.find_element(By.XPATH,"//textarea[@aria-label='tags']") 其中 'tags' 是 'textarea' 元素中的 aria-label="tags" (在页面的 'view source' 中)。如果它是输入字段,则可以将“textarea”与“input”交换,依此类推。

以上是关于使用 aria-label 通过 Python3 和 Selenium 定位和单击元素的主要内容,如果未能解决你的问题,请参考以下文章

aria-label 和 title 属性有啥区别?

如何在 kotlin 中使用 div 角色和 aria-label 设置 xpath

Bootstrap的aria-label与aria-labelledby

无法将动态 aria-label 值添加到 md-datepicker

对数组的所有 aria-label 元素进行子串化

aria-label 和 label 不都读