69 lines
2.5 KiB
Python
69 lines
2.5 KiB
Python
import requests
|
||
import selenium
|
||
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
|
||
import time
|
||
import json
|
||
import base64
|
||
|
||
if __name__ == "__main__":
|
||
url = "https://creator.xiaohongshu.com/login"
|
||
|
||
driver = webdriver.Safari()
|
||
driver.maximize_window()
|
||
driver.get(url)
|
||
time.sleep(5)
|
||
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//img[@class='css-wemwzq']")))
|
||
driver.find_element(By.XPATH, "//img[@class='css-wemwzq']").click()
|
||
# time.sleep(10)
|
||
|
||
# save img
|
||
## 等待跳转
|
||
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CLASS_NAME, "css-1lhmg90")))
|
||
# 获取图片
|
||
time.sleep(3)
|
||
img_element = driver.find_element(By.CLASS_NAME, "css-1lhmg90")
|
||
img_src = img_element.get_attribute("src")
|
||
print(f"img_src: {img_src}")
|
||
img_data = base64.b64decode(img_src.split(",")[1])
|
||
print(img_data)
|
||
with open("qrcode.png", "wb") as f:
|
||
f.write(img_data)
|
||
|
||
# 打印提示信息,请用户扫描二维码
|
||
print("二维码已保存为 qrcode.png,请使用小红书 App 扫描登录")
|
||
print("等待登录中...")
|
||
|
||
# 保存当前 URL 用于检测页面跳转
|
||
current_url = driver.current_url
|
||
|
||
# 等待页面跳转(登录成功)
|
||
# 方法1:检测 URL 变化
|
||
try:
|
||
# 使用一个较长的超时时间,给用户足够时间扫码
|
||
WebDriverWait(driver, 120).until(lambda d: d.current_url != current_url)
|
||
print("检测到页面跳转,登录成功!")
|
||
except:
|
||
# 如果 URL 没有变化,尝试方法2
|
||
print("URL 没有变化,尝试检测登录状态元素...")
|
||
|
||
# 方法2:检测登录后特定元素的出现
|
||
# try:
|
||
# # 例如,检测用户头像或其他登录后才会出现的元素
|
||
# # 这里以用户头像为例,需要根据实际网页元素调整
|
||
# WebDriverWait(driver, 30).until(EC.presence_of_element_located((By.CLASS_NAME, "user-avatar")))
|
||
# print("检测到用户登录元素,登录成功!")
|
||
# except:
|
||
# print("登录超时或失败,请重试")
|
||
|
||
# 登录成功后,保存 cookies
|
||
cookies = driver.get_cookies()
|
||
with open("cookies_xhs.json", "w") as f:
|
||
json.dump(cookies, f, indent=4)
|
||
print(f"已保存 cookies 到 cookies_xhs.json 文件")
|
||
|
||
# 关闭浏览器
|
||
driver.quit()
|