from flask import Flask, render_template, request, session from playwright.sync_api import sync_playwright import os import time app = Flask(__name__) app.secret_key = 'your_secret_key' @app.route('/') def index(): return render_template('login.html') @app.route('/send_code', methods=['POST']) def send_code(): phone = request.form['phone'] session['phone'] = phone # 用 Playwright 打开页面并点击发送验证码 with sync_playwright() as p: browser = p.chromium.launch(headless=False) context = browser.new_context() page = context.new_page() page.goto("https://creator.xiaohongshu.com/login?source=&redirectReason=401&lastUrl=%252Fnew%252Fhome") page.get_by_role("textbox", name="手机号").click() page.get_by_role("textbox", name="手机号").fill(phone) page.wait_for_timeout(15000) # 等待用户手动输入验证码 page.get_by_text("发送验证码").click() # 保存 context 到磁盘,后续用 time.sleep(20) # 确保操作完成 context.storage_state(path="state.json") # browser.close() return "验证码已发送,请查收手机短信!返回" @app.route('/login', methods=['POST']) def login(): code = request.form['code'] phone = session.get('phone') # 用 Playwright继续登录 with sync_playwright() as p: browser = p.chromium.launch(headless=True) context = p.chromium.launch_persistent_context(user_data_dir=".", storage_state="state.json") page = context.pages[0] if context.pages else context.new_page() page.goto("https://creator.xiaohongshu.com/login?source=&redirectReason=401&lastUrl=%252Fnew%252Fhome") # 填写验证码并登录 page.wait_for_selector('input[placeholder*="验证码"]', timeout=15000) vcode_box = page.locator('input[placeholder*="验证码"]') vcode_box.fill(code) page.get_by_role("button", name="登 录").click() # 等待跳转 page.wait_for_url("**/new/home", timeout=20000) # 保存 cookies context.storage_state(path="cookies.json") browser.close() return "登录成功,cookie已保存!返回" if __name__ == '__main__': app.run(host='0.0.0.0', port=5000)