硒网络驱动程序 | find_elements return 只有一个结果

Selenium WebDriver | find_elements return only one result

我正在尝试使用 python 和 selenium webdriver 抓取 google 搜索结果,但无法弄清楚 find_elements[=23= 函数的原因] returns只有class中的一个元素([=26=中有多个h3元素,每个包含不同的标题)。

    for element in driver.find_elements(by=By.XPATH, value='//*[@class="v7W49e"]'):
    title = element.find_element(by=By.XPATH, value='//h3').text
    print(title)

Link to Webpage Inspect

函数没有return任何错误,只是第一个结果的标题。

谢谢。

要在另一个元素中搜索元素,您应该使用以点开头的 XPath . 否则 Selenium 将 return 您是 DOM 中与传递的匹配的第一个元素定位器,在本例中为 //h3
因此,您的代码可以如下所示:

for element in driver.find_elements(by=By.XPATH, value='//*[@class="v7W49e"]'):
    title = element.find_element(by=By.XPATH, value='.//h3').text
    print(title)

UPD
那里只有一个元素匹配 //*[@class='v7W49e'] XPath 定位器,因此 driver.find_elements(by=By.XPATH, value='//*[@class="v7W49e"]') 将始终 return 你一个单一的网络元素。
您应该在那里使用 //*[@class='v7W49e']//h3
此代码将工作得更好。
它仍然不够好,因为并非所有匹配 //*[@class='v7W49e']//h3 XPath 定位器的元素都会有文本显示给您,但这会给您多个结果。

for element in driver.find_elements(by=By.XPATH, value='//*[@class="v7W49e"]//h3'):
    title = element.text
    print(title)