使用 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 <div class="mn-hd-txt">...</div> is not clickable at point (306, 99). Other element would receive the click: <a class="q qs" href="/search?q=ISIS+OR+IS+OR+%22Islamic+State%22&amp;dcr=0&amp;source=lnms&amp;tbm=isch&amp;sa=X&amp;ved=0ahUKEwjYy56A4OrWAhWFDMAKHVG9BDAQ_AUICygC">...</a>
任何想法如何解决这个问题?提前致谢!
对于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 定位和单击元素的主要内容,如果未能解决你的问题,请参考以下文章
如何在 kotlin 中使用 div 角色和 aria-label 设置 xpath
Bootstrap的aria-label与aria-labelledby