Python Selenium登录后跳转指定URL如何保持登录状态
解决方案
基础说明
Python版本的Selenium没有提供driver.navigate().to()方法,该方法是Java等其他语言Selenium SDK的专属实现,Python中实现页面导航的标准方法就是你已经用到的driver.get(),无需在这个方法上做额外尝试。
你遇到的driver.get()打开新标签、跳转后登录态丢失的问题,对应两个常见原因和解决方法:
- 原因1:登录操作完成后没有等待身份凭证下发完成就直接跳转。点击登录按钮后,服务端返回的登录态Cookie、前端存储的身份标识需要一定时间写入浏览器,此时立刻跳转目标页,请求会携带未更新的旧凭证,自然会被判定为未登录。
解决方法:登录后加显式等待,确认登录流程完全结束后再执行跳转操作,比如等待登录成功后才会出现的元素加载完成,再调用跳转方法。 - 原因2:目标站点存在特殊前端逻辑,触发
driver.get()时会强制打开新标签,新标签的上下文没有继承当前的登录态。
解决方法:用执行原生JS的方式强制在当前标签页跳转,绕过站点的跳转拦截逻辑。
可直接运行的修改后代码
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By driver.get("https://ui8.net/") print("Trying to log in on UI8") driver.implicitly_wait(15) driver.find_element_by_xpath( "/html/body/div[1]/header/div[2]/div[2]/a").click() email_input = driver.find_element_by_id("login-email") password_input = driver.find_element_by_id("login-password") email_input.send_keys(data["login"]) password_input.send_keys(data["pw"]) driver.find_element_by_id("login-button").click() # 新增:等待登录成功,确认头像元素加载完成(这里的xpath替换成你站点登录后才会出现的元素的定位规则) WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.XPATH, "//img[contains(@class,'avatar')]")) ) print("Logged in on UI8") # 方式1:直接调用get(如果不会触发新标签的话用这个即可) # driver.get("https://ui8.net/affiliate/sales") # 方式2:用JS跳转,避免触发新标签逻辑,适用站点有跳转拦截的场景 driver.execute_script("window.location.href = 'https://ui8.net/affiliate/sales'")
如果按以上方法操作依然出现登录态丢失的情况,可以在登录完成后手动导出当前域名下的所有Cookie,跳转目标页后再把Cookie写入浏览器即可,代码实现如下:
# 登录完成后导出Cookie cookies = driver.get_cookies() # 跳转目标页 driver.get("https://ui8.net/affiliate/sales") # 写入所有Cookie for cookie in cookies: driver.add_cookie(cookie) # 刷新页面让Cookie生效 driver.refresh()
内容的提问来源于stack exchange,提问作者peterlloydskubur
相关产品推荐
相关产品推荐

