首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Selenium-Python:如何从一个函数返回webdriver并传递给另一个函数

Selenium-Python:如何从一个函数返回webdriver并传递给另一个函数
EN

Stack Overflow用户
提问于 2022-04-10 22:24:25
回答 1查看 684关注 0票数 0

我有两个使用selenium的函数。一个登录,另一个在网站上执行身份验证操作。

代码语言:javascript
运行
复制
from selenium import webdriver

def login(driver):
    driver.get('website.com')
    # login

    return driver

def do_stuff(driver):
    driver.get('website.com/things')
    # do stuff

    return driver

if __name__ == '__main__':
    driver = webdriver.Firefox()

    driver = login(driver)
    driver = do_stuff(driver)

    driver.close()

第一个函数成功登录,但当第二个函数运行时,我得到以下错误:

代码语言:javascript
运行
复制
selenium.common.exceptions.InvalidSessionIdException: Message: Tried to run command without establishing a connection

我在第一个函数的末尾和第一个函数的开头检查了驱动程序的session_id,它们是相同的。另外,它不应该成为脚本中的特定命令的问题,因为它在不分成两个函数时工作。如果有帮助,我可以提供一个更具体的代码示例。

我错过了什么,有什么办法让这件事起作用吗?

EN

回答 1

Stack Overflow用户

发布于 2022-04-10 23:01:34

我接受了您的代码,并做了一些简单的调整以适应我的环境,添加了print()语句并执行了您的程序,看起来它运行完美到

selenium4

代码块:

代码语言:javascript
运行
复制
from selenium import webdriver
from selenium.webdriver.firefox.service import Service

def login(driver):
    driver.get('https://www.selenium.dev/')
    print("Within login")
    return driver

def do_stuff(driver):
    driver.get('https://www.selenium.dev/documentation/')
    print("Within do_stuff")
    return driver

if __name__ == '__main__':
    driver = webdriver.Firefox(service=Service('C:\\BrowserDrivers\\geckodriver.exe'))
    driver = login(driver)
    driver = do_stuff(driver)
    driver.quit()

控制台输出:

代码语言:javascript
运行
复制
Within login
Within do_stuff

更新

如果仍然面临InvalidSessionIdException错误,则需要交叉检查所使用的二进制文件版本的兼容性。

您可以在selenium.common.exceptions.InvalidSessionIdException通过GeckoDriver在无头模式下使用GeckoDriver Selenium Firefox中找到相关的详细讨论

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71821007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档