You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么Selenium的get()方法第二次调用无法生效,仅添加time.sleep后可用

问题根因

  • 点击登录提交按钮后,Selenium的click()方法是异步触发的,只要点击动作发送到浏览器就会继续执行后续代码,不会等待登录请求处理完成、页面跳转落地后再往下走。
  • 你设置的implicitly_wait(5)仅对元素查找操作生效,对get()请求、页面跳转类场景不生效。
  • 无延迟的情况下,第二个browser.get()执行时,浏览器还在处理登录提交的响应,尚未完成登录状态同步、登录后初始跳转,新的get请求会被浏览器未完成的登录流程打断,或者触发网站登录态校验失败,最终导致跳转失效。
  • 加了time.sleep(5)后给了足够时间让登录流程完整走完,浏览器上下文稳定后再执行新的get请求,自然可以正常跳转。

更优替代方案

time.sleep()属于强制固定等待,时间设置过短达不到效果,设置过长会浪费执行时间,推荐用显式等待替代:
等待登录成功的特征条件触发,确认登录流程完成后再调用第二个get,示例代码如下:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

LOGIN = 'something@mail.com'
PASS = 'somepass'
LINK = 'https://stepik.org/'

browser = webdriver.Chrome()
browser.implicitly_wait(5)
browser.get(LINK)
browser.find_element_by_id('ember232').click()
browser.find_element_by_name('login').send_keys(LOGIN)
browser.find_element_by_name('password').send_keys(PASS)
browser.find_element_by_xpath('//button[@type = "submit"]').click()

# 显式等待:最多等10秒,直到登录后的用户头像元素加载出来,确认登录完成
WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, 'button[data-test="profile-button"]')))
# 此时再执行跳转不会失效
browser.get('https://stepik.org/lesson/237240/step/3?unit=209628')

内容的提问来源于stack exchange,提问作者Виталий Агарев

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 13:15:01