使用 playwright 自定义 js 下载的路径和文件名
遇到一个问题,点击按钮自动下载文件,路径和文件名都不能自定义,可以用 playwright 来解决这个问题
from playwright.sync_api import sync_playwright
import os
import time class ExcelDownloader: def __init__(self, download_path: str): self.download_path = os.path.abspath(download_path) os.makedirs(self.download_path, exist_ok=True) def download(self, url: str, file_name: str): with sync_playwright() as p: browser = p.chromium.launch(headless=False) # 设置 headless=True 可以隐藏浏览器 context = browser.new_context( accept_downloads=True, viewport={'width': 1920, 'height': 1080} ) page = context.new_page() try: # 访问页面 page.goto(url) # 等待页面加载完成 page.wait_for_load_state("networkidle") # 等待按钮可见 page.wait_for_selector('button[ng-click="exportOrder()"]', state="visible") # 开始监听下载 with page.expect_download() as download_info: # 点击导出按钮 page.click('button[ng-click="exportOrder()"]') # 获取下载对象 download = download_info.value # 构建保存路径 save_path = os.path.join(self.download_path, file_name) # 如果文件已存在则删除 if os.path.exists(save_path): os.remove(save_path) # 保存文件 download.save_as(save_path) print(f"文件已下载到: {save_path}") return save_path except Exception as e: print(f"下载失败: {str(e)}") raise finally: context.close() browser.close() # 使用示例
def main(): # 下载配置 config = { "url": "https://example.com/page", "download_path": "D:/Downloads", "file_name": "export.xlsx" } downloader = ExcelDownloader(config["download_path"]) try: file_path = downloader.download( url=config["url"], file_name=config["file_name"] ) print(f"下载成功: {file_path}") except Exception as e: print(f"下载失败: {str(e)}") if __name__ == "__main__": main()