@contextmanager
def get_cursor(self):
try:
with self.conn.cursor() as cursor:
yield cursor
self.conn.commit()
except Exception as e:
self.conn.rollback()
raise e
3、动态获取有效Cookie
python
def get_valid_cookie(mysql_client):
with mysql_client.get_cursor() as cursor:
cursor.execute(SELECT * FROM cookie_pool WHERE status='valid' ORDER BY RAND() LIMIT 1)
result = cursor.fetchone()
if not result:
raise ValueError(No valid cookies available)
return result['cookie_value']
代码示例:
python
def check_all_cookies(mysql_client):
with mysql_client.get_cursor() as cursor:
cursor.execute(SELECT id, cookie_value FROM cookie_pool)
for row in cursor.fetchall():
if not validate_cookie(row['cookie_value']):
cursor.execute(UPDATE cookie_pool SET status='invalid' WHERE id=%s, (row['id'],))
2、失效Cookie补救
当检测到Cookie失效时,立即启动备用方案:
python
def handle_invalid_cookie(mysql_client):
实现登录逻辑重新获取Cookie
new_cookie = login_and_get_cookie()
with mysql_client.get_cursor() as cursor:
cursor.execute(INSERT INTO cookie_pool (cookie_value) VALUES (%s), (new_cookie,))
五、性能优化技巧
1、索引优化
sql
CREATE INDEX idx_status ON cookie_pool(status);
2、连接池配置
python
from DBUtils.PooledDB import PooledDB