SeleniumBase执行Gmail登录后自动关闭浏览器,PDB调试也无效
问题根源
你代码里的with SB(uc=True) as sb是上下文管理器,当login_to_gmail方法内的代码块执行完毕,上下文会自动销毁SB实例,连带关闭浏览器,导致后续的time.sleep和pdb调试完全没机会生效。另外你原代码里调用mr.login_to_gmail前没有实例化GMAIL_LOGIN类,这也是一个隐性问题。
解决方案
去掉with语句,手动创建并管理SB实例的生命周期,让浏览器不会自动关闭,直到你主动触发退出操作。
修改后的代码示例:
from seleniumbase import SB from selenium.webdriver.chrome.service import Service from selenium import webdriver import time import pdb class GMAIL_LOGIN(): def __init__(self, driver): self.driver = driver self.sl = SeleniumExtended(self.driver) # 将SB实例绑定为类属性,方便全局操作 self.sb = SB(uc=True) def login_to_gmail(self, email, password): self.sb.open("https://www.google.com/gmail/about/") self.sb.click('a[data-action="sign in"]') self.sb.type('input[type="email"]', email) self.sb.click('button:contains("Next")') self.sb.sleep(5) self.sb.type('input[type="password"]', password) self.sb.click('button:contains("Next")') def close_browser(self): # 手动关闭浏览器的方法,按需调用 self.sb.quit() service = Service(executable_path=r"C:\Users\RoyMazin\Documents\BrowserDrivers\chromedriver.exe") options = webdriver.ChromeOptions() driver = webdriver.Chrome(service=service, options=options) # 先实例化类 mr = GMAIL_LOGIN(driver) mr.login_to_gmail("example@gmail.com","Test1234!") # 此时浏览器保持打开状态,可执行后续操作 time.sleep(5) pdb.set_trace() # 完成操作后手动关闭浏览器 mr.close_browser()
关键调整说明
- 把SB实例绑定为类属性,在整个类的生命周期内都可以操作该浏览器实例
- 新增
close_browser方法,由你手动控制浏览器关闭时机 - 补全了类实例化的步骤,修复原代码中直接调用方法的错误
内容的提问来源于stack exchange,提问作者Roy idiot
相关产品推荐
相关产品推荐

