使用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(">>>>>执行完成<<<<<")