使用Python Selenium Chrome WebDriver登录后立即遇会话过期错误
问题:Selenium自动化登录Slido后立即出现会话过期错误
代码执行无报错,但点击“Login”按钮后立即出现会话过期错误(截图:
)。使用Python结合Selenium Chrome WebDriver实现自动化流程,Edge浏览器也出现相同问题。
使用的代码如下:
chrome_driver_path = r"C:\Users\selenium\chromedriver_win32\chromedriver.exe" options = webdriver.ChromeOptions() driver = webdriver.Chrome(executable_path=chrome_driver_path,options=options) wait = WebDriverWait(driver, 5) #open the webpage and enter the email id on the login page driver.get("https://auth.slido.com/login? auth_state=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IkIifQ.eyJqdGkiOiJmNzZjNzNmNC1hODcyLTQ5NzYtOTBiMS1jZWM5NTJiNTRmNmYiLCJjbHVzdGVyX2lkIjoiZXUxIiwiY2xpZW50SWQiOiI2OTFmNGMxNi1kZTM1LTExZWItYmE4MC0wMjQyYWMxMzAwMDQiLCJwcm9tcHQiOiJjb25zZW50IiwicmVkaXJlY3RVcmkiOiJodHRwczovL2FkbWluLnNsaS5kby9vYXV0aC1jYWxsYmFjayIsInNjb3BlIjoib3BlbmlkIG9mZmxpbmVfYWNjZXNzIGVtYWlsIHByb2ZpbGUgc3lzdGVtOnNjb3BlOmFjcXVpcmUiLCJzZXNzaW9uIjp7ImlzQXV0aE4iOmZhbHNlLCJpc0ludGVybmFsIjp0cnVlfSwic3RhdGUiOiJleUp5WldScGNtVmpkQ0k2SW1GSVVqQmpTRTAyVEhrNWFGcEhNWEJpYVRWNllrZHJkVnBIT0haYVdGcHNZbTVTZWlKOSIsImNsYWltcyI6e30sImlhdCI6MTY3NTE3NTk3MSwiZXhwIjoxNjc1MTc3NzcxLCJpc3MiOiJodHRwczovL2F1dGguc2xpZG8uY29tIn0.Y7WjeXgVCoZMKTfbJ2iy-O7UQn8_-vz_ZhgwsyuyrxervrMnBRYN-oCGEnRI5SnQDlRxif1qBSpDUxNSOOGnv4wgCTLRfq-X-AE7dHeOFcvAdGmmCl_HGGEpQ5plA7yT7f7pMt6xibK2ZhwNL7KwY_OUgVpgz0ROcSv7wBQVNGcx2Am0NfGZw1eDEhBfyiUTktGqTDVyQfmNAB3F7G7PtvgoXEikLLTZBqBY93d5w4RrjxIt6tzdiNpBKwwMulXmSzr0OGnLiRCQXsNfLyst028Hmoq_HsxFLICTKxZTOkelFB83XM1zGRnUkjCOCT-EhQbT0I-hJvQccdlbCdjXKg") #first accepting all cookies before moving to our actual search driver.find_element(By.XPATH,"/html/body/div[2]/div[2]/button[2]").click() time.sleep(2) #assigining the username driver.find_element(By.ID,"email").send_keys("xyz@abc.com") #then clicking on the continue button and move forward driver.find_element(By.XPATH, "/html/body/auth-root/auth-layout/div[3]/div/auth-login/div/div/form/auth-recaptcha/div/div[2]/button").click() time.sleep(2) #now we need to assing the password to login driver.find_element(By.ID,"password").send_keys("####") #click on the login button next driver.find_element(By.XPATH, "/html/body/auth-root/auth-layout/div[3]/div/auth- login/div/div/form/auth-recaptcha/div/div[2]/button").click() time.sleep(2) print("Logged in")
解决方案
1. 替换过期的auth_state链接
你当前使用的URL包含一次性且已过期的auth_state参数,这是会话立即过期的核心原因。直接访问Slido的官方基础登录页:
driver.get("https://auth.slido.com/login")
2. 修复定位错误,改用稳定定位+显式等待
代码中登录按钮的XPATH存在空格(auth- login),会导致定位失败;同时绝对XPATH易因页面结构变化失效。改用相对定位+WebDriverWait替代time.sleep,确保元素加载完成后再操作:
from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 等待并点击Accept all按钮 wait.until(EC.element_to_be_clickable((By.XPATH, "//button[text()='Accept all']"))).click() # 等待邮箱输入框可见并输入内容 email_field = wait.until(EC.visibility_of_element_located((By.ID, "email"))) email_field.send_keys("xyz@abc.com") # 点击Continue按钮 wait.until(EC.element_to_be_clickable((By.XPATH, "//button[contains(text(), 'Continue')]"))).click() # 等待密码输入框可见并输入内容 password_field = wait.until(EC.visibility_of_element_located((By.ID, "password"))) password_field.send_keys("####") # 点击Log in按钮 wait.until(EC.element_to_be_clickable((By.XPATH, "//button[contains(text(), 'Log in')]"))).click()
3. 伪装浏览器指纹,绕过反爬检测
Slido会检测自动化工具特征,需配置ChromeOptions模拟真实浏览器:
options = webdriver.ChromeOptions() # 禁用自动化提示 options.add_experimental_option("excludeSwitches", ["enable-automation"]) options.add_experimental_option('useAutomationExtension', False) # 设置真实用户代理 options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36") # 可选:复用已登录的浏览器会话(需替换为你的Chrome用户数据路径) options.add_argument(r"user-data-dir=C:\Users\<你的用户名>\AppData\Local\Google\Chrome\User Data") options.add_argument("profile-directory=Default")
4. 处理reCAPTCHA验证
如果页面出现reCAPTCHA,Selenium无法自动识别,可选择:
- 使用第三方验证码服务(如2Captcha)对接处理
- 手动完成验证码后,再继续后续自动化流程(适合测试场景)
内容的提问来源于stack exchange,提问作者Django0602
相关产品推荐
相关产品推荐

