Python中如何在for循环中保持driver.get(url)的会话状态?
代码块 1
driver.get(url)
wait
for~~~~~:
~~~~~
ele = find_elements_by_path
~~~~~~~~
try:
~~####
except e:
#####
代码块 2
for ~~~~:
driver.get(url)
wait
ele =find_elements_by_path
~~~~~~~~
try:
~~####
except e:
#####
代码块 1 在第一遍循环中是正常的,ele 能够返回列表;第二遍循环就会报错 out of index range,ele 返回空列表,
代码块 2 属于正常的满足,功能,可是每次 driver.get(url)然后 wait,真的开销很大,有没有好的办法解决呢?
Python中如何在for循环中保持driver.get(url)的会话状态?
在Selenium中,driver.get(url) 每次调用都会开启一个新页面,但会话状态(如cookies、本地存储)默认会通过WebDriver实例自动保持。如果你在循环中访问多个页面,只要不关闭或重新创建driver,会话就是持续的。
不过,常见问题是在循环中页面跳转或弹窗导致状态丢失。关键是要确保每次get()后等待页面完全加载,并处理可能的登录或会话超时。下面是一个保持会话的典型循环示例:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 启动浏览器,只创建一次driver实例
driver = webdriver.Chrome()
driver.get("https://example.com/login")
# 登录(只需一次)
driver.find_element(By.ID, "username").send_keys("your_user")
driver.find_element(By.ID, "password").send_keys("your_pass")
driver.find_element(By.ID, "login-btn").click()
# 等待登录完成
WebDriverWait(driver, 10).until(EC.url_contains("dashboard"))
# 循环访问多个页面,会话状态自动保持
urls = ["https://example.com/page1", "https://example.com/page2", "https://example.com/page3"]
for url in urls:
driver.get(url) # 会话cookies等会自动携带
# 等待页面关键元素加载
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.TAG_NAME, "body")))
# 这里进行你的页面操作...
print(f"当前页面标题: {driver.title}")
# 最后关闭
driver.quit()
核心要点:
- 单实例:整个循环使用同一个
driver对象。 - 登录前置:在循环前完成登录,后续
get()会携带cookies。 - 等待机制:使用显式等待确保页面加载完成再操作。
如果你遇到会话丢失,检查是否有页面跳转导致登录态失效,可能需要重新登录或从缓存恢复cookies。
总结:用一个driver实例别关就行。

