在Python中使用Selenium获取顶级结果

在Python中使用Selenium获取顶级结果,python,html,google-chrome,selenium,xpath,Python,Html,Google Chrome,Selenium,Xpath,我正在尝试输入一个搜索词,并从搜索中获取顶级URL列表。我是硒的新手,不知道自己在做什么。到目前为止,我一直在学习本教程: 在返回顶级URL之前,一切正常。我使用的xPath是在检查后直接从google上的元素获得的。这是我当前的代码: from selenium import webdriver def get_results(search_term): url = "https://www.google.com" driver = webdriver.Chrome()

我正在尝试输入一个搜索词,并从搜索中获取顶级URL列表。我是硒的新手,不知道自己在做什么。到目前为止,我一直在学习本教程:

在返回顶级URL之前,一切正常。我使用的xPath是在检查后直接从google上的元素获得的。这是我当前的代码:

from selenium import webdriver

def get_results(search_term):
    url = "https://www.google.com"

    driver = webdriver.Chrome()
    driver.get(url)
    search_box = driver.find_element_by_id("lst-ib")
    search_box.send_keys(search_term)
    search_box.submit()

    links = driver.find_element_by_xpath("//*[@id="rso"]/div[3]/div/div[1]/div/h3/a")

    results = []
    for link in links:
        href = link.get_attribute("href")
        print(href)
        results.append(href)

    driver.close()
    return results


get_results("Who is the president of the united states?")

运行此命令时,xPath
(“//*[@id=“rso”]/div[3]/div/div[1]/div/h3/a”)
上不断出现无效语法错误。你知道为什么这样不行吗?谢谢

记住您应该在
中使用字符串通过xpath查找元素

所以你可以改变

“//*[@id=“rso”]/div[3]/div/div[1]/div/h3/a”

“//*[@id='rso']/div[3]/div/div[1]/div/h3/a”

因此,它可以是所有字符串。

您可以使用以下xpath:

(“//*[@id='rso']///h3/a”)

您应该使用find_elements_by_xpath以列表对象的形式获取结果。 通过xpath查找元素只返回第一个元素

find_element(s)_by_xpath
这应该起作用:

links = driver.find_elements_by_xpath("""//*[@id="rso"]/div/div/div/div/div/h3/a""")

原因是URL xpath没有遵循某种模式,因此发生这种情况时,您只需删除导致错误的路径的
[n]

如果您想获得元素的
列表,应该使用
通过xpath()查找元素
而不是
通过xpath()查找元素
我尝试了这个,但它仍然显示这个错误:
消息:没有这样的元素:找不到元素:{“方法”:“xpath”,“选择器”:“/*[@id='rso']]/div[3]/div/div[1]/div/h3/a”}
这是另一个问题,它显示了xpath选择的元素。改用CSS选择器如何?您可以使用CSS选择器by
find_elements\u by_CSS\u Selector
它仍然显示相同的错误,只是改用了CSS选择器路径。我想我可能只是使用python请求而不是Selenium。我听说这样更好。感谢您的帮助每当我将fin_element更改为
find_elements
时,该函数都不起作用。Chrome将打开,然后立即关闭。我尝试了您提到的xpath,出于某种原因,它仍然返回一个错误,因为没有这样的元素