0

我有下面的代码,我知道它以前工作过,但由于某种原因现在似乎被破坏了。该代码的目的不是打开搜索引擎,搜索查询并按href标签返回结果列表。网络浏览器将打开并完全导航到http://www.startpage.com成功,然后将我在底部输入的术语放入搜索框,然后关闭浏览器。没有错误,没有链接。没有什么。

import selenium.webdriver as webdriver

def get_results(search_term):
    url = "https://www.startpage.com"
    browser = webdriver.Firefox()
    browser.get(url)
    search_box = browser.find_element_by_id("query")
    search_box.send_keys(search_term)
    search_box.submit()
    try:
        links = browser.find_elements_by_xpath("//ol[@class='web_regular_results']//h3//a")
    except:
        links = browser.find_elements_by_xpath("//h3//a")
    results = []
    for link in links:
        href = link.get_attribute("href")
        print(href)
        results.append(href)
    browser.close()
    return results

get_results("dog")

有谁知道这有什么问题?基本上它会search_box.submit()跳过所有内容,直到browser.close().

4

2 回答 2

1

find_element_by_xpath(单个 WebElement)不同,如果find_elements_by_xpath找不到任何结果,它不会抛出异常,它将返回一个空列表。links为空,因此for永远不会执行循环。您可以更改try excepttoif条件,并检查它是否有值

links = browser.find_elements_by_xpath("//ol[@class='web_regular_results']//h3//a")
if not links:
    links = browser.find_elements_by_xpath("//h3//a")
于 2019-07-29T08:55:57.877 回答
0

不建议在您正在测试的功能中使用浏览器关闭功能。相反,您可以在 get_results("dog") 函数之后使用并保持测试逻辑远离。

get_results("dog")
browser.close()

通过这样做,selenium 会先完成函数的执行,然后关闭浏览器窗口。

您的解决方案的问题是该方法在浏览器关闭窗口后返回结果集,因此您的脚本面临逻辑问题。

于 2019-07-29T08:50:35.200 回答