Python中Sqlite cursor.execute干扰Selenium driver.get问题求助
解决方案
关于SQLAlchemy的可行性
用SQLAlchemy替代原生sqlite3完全可以解决这个问题。SQLAlchemy的连接池和资源管理机制比原生sqlite3更严谨,不会出现因未正确释放数据库资源导致的Selenium进程异常。
不用换库的快速修复方法
不用急着换SQLAlchemy,先试试修复原生sqlite3的资源管理问题,大概率能解决:
- 用
with语句管理数据库连接和游标,查询完成后会自动释放资源,避免资源占用干扰Selenium:
import sqlite3 from selenium import webdriver # 数据库查询部分,with自动处理连接关闭 with sqlite3.connect("your_database.db") as conn: cursor = conn.cursor() cursor.execute("SELECT dblink, dbuser, dbpass FROM your_table LIMIT 1") dblink, dbuser, dbpass = cursor.fetchone() # 资源已释放,再启动浏览器 driver = webdriver.Chrome() driver.get(dblink)
- 如果不想用
with,手动查询完成后立刻关闭游标和连接:
conn = sqlite3.connect("your_database.db") cursor = conn.cursor() cursor.execute("SELECT dblink, dbuser, dbpass FROM your_table LIMIT 1") dblink, dbuser, dbpass = cursor.fetchone() # 手动释放资源 cursor.close() conn.close() # 再启动Selenium driver = webdriver.Chrome() driver.get(dblink)
关于jsonify的说明
jsonify是Flask框架里用于生成JSON响应的工具,和你当前遇到的数据库操作与Selenium冲突问题没有直接关联,用它解决不了根本问题,没必要尝试。
备选方案:分离数据库操作与Selenium进程
如果上述方法都无效,把数据库查询和Selenium操作放到不同进程里执行,彻底隔离资源:
import sqlite3 from selenium import webdriver from multiprocessing import Process def get_db_data(): with sqlite3.connect("your_database.db") as conn: cursor = conn.cursor() cursor.execute("SELECT dblink, dbuser, dbpass FROM your_table LIMIT 1") return cursor.fetchone() def run_selenium(data): dblink, dbuser, dbpass = data driver = webdriver.Chrome() driver.get(dblink) # 后续操作 if __name__ == "__main__": db_data = get_db_data() selenium_process = Process(target=run_selenium, args=(db_data,)) selenium_process.start() selenium_process.join()
内容的提问来源于stack exchange,提问作者Derpa
相关产品推荐
相关产品推荐

