当前位置: 首页 > article >正文

使用 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()

http://www.kler.cn/a/547248.html

相关文章:

  • 智能编程助手功能革新与价值重塑之:GitHub Copilot
  • Word正文中每两个字符之间插入一个英文半角空格
  • Myplater项目
  • 【Linux】详谈 进程控制
  • Python 爬虫中的异常处理
  • 探索Hugging Face:开源AI社区的核心工具与应用实践
  • NVIDIA 开发者社区第十一届Sky Hackathon训练营实验手册---AWS Sagemaker AI部分
  • 【无线感知会议系列-22 】Vivisecting Mobility Management in 5G Cellular Networks
  • 使用Java爬虫获取1688商品评论:实战案例指南
  • 基于STM32的智能家居安防系统
  • 蓝桥杯备考:贪心算法之纪念品分组
  • 网络安全初级实战笔记(一):owasp zap 暴力破解
  • 深入理解Linux网络随笔(一):内核是如何接收网络包的(下篇)
  • 25动科畜牧研究生复试面试问题汇总 动科畜牧专业知识问题很全! 动科畜牧复试全流程攻略 动科畜牧考研复试真题汇总
  • 【愚公系列】《Python网络爬虫从入门到精通》009-使用match()进行匹配
  • 一键高清修复、智能剪辑,媒体处理还能多智能?
  • springboot集成zookeeper的增删改查、节点监听、分布式读写锁、分布式计数器
  • 计算机毕业设计——Springboot垃圾分类网站
  • 【k8s应用管理】kubernetes 配置资源管理
  • 数据挖掘智能Agent