selenium使用find_elements进行二次定位时出现的问题

在使用selenium爬取数据的时候,使用了find_elements嵌套提取的时候遇到了问题

任务是提取下面网站上所有电影的名字(有CSS位置偏移)

browser = webdriver.Chrome()
browser.get("https://antispider3.scrape.center/")
div_list = browser.find_elements(By.XPATH, '//div[@id="index"]/div//div[@class="el-row"][1]/div')
# 提取了这个网站上这一页18个电影信息的要素

测试了一下,提取第二个电影的名字(虽然有偏移)是没问题的。

print(div_list[1].text)    # 提取第二个电影的名字
#清
#风
#家
#白

然而对div_list再进行find_elements的时候,提取出来的不是一部电影的名字,而是全部电影的名字:

print([a.text for a in div_list[1].find_elements(By.XPATH, "//h3/span")]  # 再利用find_elements定位span标签
# ['Wonder', '风\n\n\n清', '法\n\n\n\n妃', '士\n\n\n\n(', '年\n\n\n\n,', '非\n\n\n\n(', '些\n\n\n\n那', '笑\n........]

为什么对'selenium.webdriver.remote.webelement.WebElement'再进行find_elements,查找到的是全部元素而不是需要定位的父元素下的子元素呢?

  1. xpath 是绝对路径查找
  2. 可以改成 find_elements(By.TAG_NAME, 'h3'),这样就是相对父元素查找