这是一篇快速的文章,展示如何使用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元素