如何使用Python Selenium WebDriver找到页面中的父元素

548 阅读1分钟

这是一篇快速的文章,展示如何使用Python的Selenium Webdriver轻松获得HTML元素的父元素。方法不止一种。

假设我们想从一个HTML页面中获得一个没有id或唯一的CSS类的HTML按钮。

<html>
<body>
...
  <button>
   <span id="account-login-submit-message">Login</span>
  </button>
...
</body>
</html>

1.使用XPATH获取父元素

首先,我们可以用id来检索标签的HTML元素。

submitLoginSpan = wd.find_element_by_id("account-login-submit-message")

然后,你可以通过简单的调用,使用XPATH检索父元素。

submitLoginSpan = wd.find_element_by_id("account-login-submit-message")
submitLoginButton = submitLoginSpan.find_element_by_xpath("..")
submitLoginButton.click()

2.使用XPATH祖先直接获取父元素

我们也可以使用XPATH :anfestor::<TAG_NAME>来检索一个元素的父元素。其中TAG_NAME是我们试图检索的HTML元素的标签名称。

submitLoginButton = wd.find_element_by_xpath('//span[@id="account-login-submit-message"]/ancestor::button')
submitLoginButton.click()

3.使用CSS选择器获取父元素

目前,还没有使用CSS选择器选择父元素的方法,因此我把它放在这里,以缩短你的搜索时间。

你可能很想写下面的代码。

submitLoginSpan = wd.find_element_by_id("account-login-submit-message")
submitLoginButton = submitLoginSpan.parent
submitLoginButton.click()

但是你会得到一个错误。

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_27716/2471411830.py in <module>
      1 submitLoginSpan = wd.find_element_by_id("account-login-submit-message")
      2 submitLoginButton = submitLoginSpan.parent
----> 3 submitLoginButton.click()

AttributeError: 'WebDriver' object has no attribute 'click'

这是因为.parent属性返回的是对包含该HTML元素的Selenium WebDriver实例的引用。它并没有返回实际的父HTML元素