python + playwright 非无痕模式打开网页下载json数据

使用python从网页下载资料,生成一些图表使用,因为json数据需要SSO验证,不然没有Token是无权限获取的,所以使用playwright 无痕模式打开不行,要使用非无痕模式。

从网页报表上把json数据转成Excel保存

代码没有多华丽,只是满足了那时候需要這一操作的需求。

点击查看代码
from playwright.sync_api import sync_playwright
import requests
import pandas as pd


pwd = "admin2003"

def jsonToexcel(url,token,filename):
    response = requests.get(url,params={"Token": token})
    
    if response.status_code == 200:
        json_data = response.json()
        #print(json_data)
    else:
        print("请求失败,状态码:", response.status_code)

    if bool(json_data):
        df = pd.DataFrame(json_data)
        df.to_excel(filename, index=False, engine="openpyxl")
        print("档案下載保存成功")
    else:
        print("档案下載失敗")

#以非无痕模式打开浏览器,不然沒有cookie
p = sync_playwright().start()
browser = p.chromium.launch_persistent_context(
    # 指定本机用户缓存地址
    user_data_dir=f"D:\chrome_user\yqy",
    # 接收下载事件
    accept_downloads=True,
    # 设置 GUI 模式
    headless=False,
    bypass_csp=True,
    slow_mo=1000,
    channel="chrome"
)
page = browser.pages[0]
page.goto("http://*****.html&Reload=172345679606")
page.locator("input[type=\"text\"]").click()
page.locator("input[type=\"text\"]").fill("*******")
page.locator("#tbPassword").click()
page.locator("#tbPassword").fill(pwd)
page.get_by_role("button", name="Sign In").click()
print(">>>>>頁面加載中,請稍后<<<<<<")
page.wait_for_timeout(20000)

print("开始获取cookie")
cookies = browser.cookies()
#print("Cookies:", cookies)

#获取Token
sso_token_value = [d['value'] for d in cookies if d['name'] == 'SSOToken'][0]
print(sso_token_value)

#API地址
url1 = "http://*******01"
url2 = "http://*******02"

filepath = "F:\public\Tableau\Chart\\"

print(">>>>>>开始下載第一份excel,請稍后<<<<<<")
jsonToexcel(url1,sso_token_value,filepath+"001.xlsx")
print("------------------------------------------------------------")
print(">>>>>>开始下載第二份excel,請稍后<<<<<<")
jsonToexcel(url2,sso_token_value,filepath+"002.xlsx")

print("网页执行登出")
page.get_by_role("link", name="叶**").click()
page.get_by_role("link", name=" Log Out").click()
page.wait_for_timeout(3000)
print("网页登出完毕")

browser.close()
print(">>>>>执行完成<<<<<")
posted @   暮夜秋雨  阅读(204)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
点击右上角即可分享
微信分享提示