技术分享1 分钟阅读
获取web登录信息保存,让playwright直接可以使用免登录
能做什么?为什么这么做?发挥想象!
在控制台输入代码
function getCookieDetails(cookie) {
const [name, value] = cookie.split("=");
const escapedValue = value ? decodeURIComponent(value.replace(/'/g, "\\'")) : '';
return {
name: name.trim(),
value: escapedValue,
domain: window.location.hostname,
path: "/",
expires: -1,
httpOnly: false,
secure: false,
sameSite: "Lax"
};
}
function exportSessionStorage() {
let sessionStorageData = [];
for (let i = 0; i < sessionStorage.length; i++) {
const key = sessionStorage.key(i);
const value = sessionStorage.getItem(key);
sessionStorageData.push({
name: key,
value: value
});
}
return sessionStorageData;
}
function exportLocalStorage() {
let localStorageData = [];
for (let i = 0; i < localStorage.length; i++) {
const key = localStorage.key(i);
const value = localStorage.getItem(key);
localStorageData.push({
name: key,
value: value
});
}
return localStorageData;
}
function exportCookies() {
let cookiesData = [];
const cookies = document.cookie.split("; ");
cookies.forEach(cookie => {
if (cookie) {
cookiesData.push(getCookieDetails(cookie));
}
});
return cookiesData;
}
const result = {
cookies: exportCookies(),
origins: [
{
origin: window.location.origin,
localStorage: exportLocalStorage(),
sessionStorage: exportSessionStorage()
}
]
};
const blob = new Blob([JSON.stringify(result, null, 2)], { type: 'application/json' });
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = 'state.json';
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
URL.revokeObjectURL(url);
playwright使用保存的文件,免登录使用
def use_saved_context():
"""
使用保存的浏览器上下文进行后续操作
"""
STATE_PATH = "state.json"
with sync_playwright() as p:
try:
# 使用保存的上下文状态启动浏览器
browser = p.chromium.launch(headless=False)
context = browser.new_context(storage_state=STATE_PATH)
page = context.new_page()
print("✅ 成功加载保存的浏览器上下文")
# 直接访问需要登录的页面
page.goto("https://XXXXXX.com/#/list")
time.sleep(2)
# 检查是否仍然处于登录状态
current_url = page.url
if "login" not in current_url.lower():
print("✅ 登录状态有效,可以正常访问页面")
time.sleep(10)
# 在这里添加你的后续操作
else:
print("❌ 登录状态已失效,需要重新登录")
except FileNotFoundError:
print(f"❌ 未找到保存的上下文文件: {STATE_PATH}")
print("请先运行登录脚本")
except Exception as e:
print(f"❌ 使用保存的上下文失败: {e}")
finally:
try:
browser.close()
except:
passselenium
print("✅ 登录成功!保存cookies...")
cookies = driver.get_cookies()
with open(STATE_PATH, "w", encoding="utf-8") as f:
json.dump(cookies, f)
logging.info("登录成功,保存cookies成功")使用
with open(STATE_PATH, "r", encoding="utf-8") as f:
cookies = json.load(f)
for cookie in cookies:
# selenium要求expiry为int类型
if "expiry" in cookie:
cookie["expiry"] = int(cookie["expiry"])
driver.add_cookie(cookie)
driver.refresh() 有关使用上的问题,欢迎您在底部评论区留言,一起交流~
读者评论
评论会同步写入该文在 Notion 中的页面底部(与正文同页,便于管理)。
暂无评论,欢迎抢沙发。