使用 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()
相关文章:
使用 playwright 自定义 js 下载的路径和文件名
遇到一个问题,点击按钮自动下载文件,路径和文件名都不能自定义,可以用 playwright 来解决这个问题 from playwright.sync_api import sync_playwright import os import time class ExcelDownloader: def __init__(self, download_pat…...
Kafka分区管理大师指南:扩容、均衡、迁移与限流全解析
#作者:孙德新 文章目录 分区分配操作(kafka-reassign-partitions.sh)1.1 分区扩容、数据均衡、迁移(kafka-reassign-partitions.sh)1.2、修改topic分区partition的副本数(扩缩容副本)1.3、Partition Reassign场景限流1.4、节点内副本移动到不…...
3.从零开始学会Vue--{{生命周期,工程化,组件化}}
1.生命周期钩子 1.是什么 生命周期 概念:就是一个Vue实例从创建 到 销毁 的整个过程 生命周期包括:① 创建 ② 挂载 ③ 更新 ④ 销毁 四个阶段 1.创建阶段:创建响应式数据 2.挂载阶段:渲染模板 3.更新阶段:修改…...
Python--网络编程
3. 网络编程与Socket 3.1 Socket基础 创建Socket import socket# TCP Socket tcp_socket socket.socket(socket.AF_INET, socket.SOCK_STREAM)# UDP Socket udp_socket socket.socket(socket.AF_INET, socket.SOCK_DGRAM)服务器端函数 函数描述bind((host, port))绑定…...
【java】方法的基本内存原理(栈和堆)
java内存主要分为栈和堆,方法相关的部分主要在栈内存里,每个方法调用时会在栈里创建一个栈帧,存放局部变量和方法执行的信息。执行完后栈帧被销毁,局部变量消失。而对象实例存在堆里,由垃圾回收器管理。 **Java方法内…...
SQLMesh 系列教程4- 详解模型特点及模型类型
SQLMesh 作为一款强大的数据建模工具,以其灵活的模型设计和高效的增量处理能力脱颖而出。本文将详细介绍 SQLMesh 模型的特点和类型,帮助读者快速了解其强大功能。我们将深入探讨不同模型类型(如增量模型、全量模型、SCD Type 2 等࿰…...
SpringBoot(接受参数相关注解)
文章目录 1.基本介绍2.PathVariable 路径参数获取信息 1.代码实例 1.index.html2.ParameterController.java3.测试 2.细节说明 3.RequestHeader 请求头获取信息 1.代码实例 1.index.html2.ParameterController.java3.测试 2.细节说明 4.RequestParameter 请求获取参数信息 1.…...
hbase合并队列超长问题分析
问题现象 hbase集群合并队列超长,有节点上合并任务已经运行超过1天未结束,合并队列总长不断增加。 问题分析 参数配置: 配置参数默认值含义hbase.hregion.memstore.flush.size128MMemStore达到该值会Flush成StoreFilehbase.hregion.memstore.block.multiplier4当region中…...
FPGA的星辰大海
编者按 时下风头正盛的DeepSeek,正值喜好宏大叙事的米国大统领二次上岗就业,OpenAI、软银、甲骨文等宣布投资高达5000亿美元“星际之门”之际,对比尤为强烈。 某种程度上,,是低成本创新理念的直接落地。 包括来自开源社区的诸多赞誉是,并非体现技术有多“超越”,而是…...
认识vue-admin
认识vue-admin **核心交付:** 为什么要基于现成架子二次开发 什么是二次开发:基于已有的代码(项目工程,脚手架)开进行新功能的开发 所以看懂已有的框架中的既有代码,变得很重要了 1. 背景知识 后台管理系统是一种最…...
STM32、GD32驱动TM1640原理图、源码分享
一、原理图分享 二、源码分享 /************************************************* * copyright: * author:Xupeng * date:2024-07-18 * description: **************************************************/ #include "smg.h"#define DBG_TAG "smg&…...
spring boot 对接aws 的S3 服务,实现上传和查询
1.aws S3介绍 AWS S3(Amazon Simple Storage Service)是亚马逊提供的一种对象存储服务,旨在提供可扩展、高可用性和安全的数据存储解决方案。以下是AWS S3的一些主要特点和功能: 1.1. 对象存储 对象存储模型:S3使用…...
PH热榜 | 2025-02-12
1. FirstHR 2.0 with HR Copilot 标语:小型企业的一站式人力资源平台 介绍:对小型企业来说,FirstHR是一个人力资源平台,专注于招聘和团队发展,并融合了一点人工智能技术。 产品网站: 立即访问 Product …...
通过例子学 rust 个人精简版 1-1
1-1 Hello World fn main() {println!("Hello World!");// 动手试一试println!("Im a Rustacean!"); }Hello World! Im a Rustacean!要点1 :println 自带换行符 注释 fn main() {let x 5 /* 90 */ 5;println!("Is x 10 or 100? x …...
HTTP的前世今生:如何塑造现代互联网的交互方式?
一、关于HTTP 1.1 简介 “没有HTTP协议,就没有今天的互联网。” 从简单的文本传输到支撑全球数十亿设备的实时交互,HTTP协议始终是Web世界的核心纽带。本文将深入剖析其设计思想、演进历程及底层工作原理。 HTTP(HyperText Transfer Protoco…...
Flutter_学习记录_动画的简单了解
用AnimationController简单实现如下的效果图: 1. 只用AnimationController实现简单动画 1.1 完整代码案例 import package:flutter/material.dart;class AnimationDemo extends StatefulWidget {const AnimationDemo({super.key});overrideState<AnimationDe…...
【java】for (int num : numbers) { System.out.print(num + “ “); } for里的是什么意思
for (int num : numbers) 是 Java 中的一种 增强型 for 循环(也称为 for-each 循环)。它的作用是遍历数组或集合中的每一个元素,并对每个元素执行循环体中的操作。 1. 增强型 for 循环的语法 java Copy for (元素类型 变量名 : 数组或集合…...
内容中台驱动企业CMS架构优化与高效策略
内容概要 在数字化转型浪潮中,企业内容管理系统(CMS)正面临从单一内容存储向智能化、协同化方向演进的迫切需求。通过引入内容中台架构,企业能够有效整合元数据管理、版本控制与智能协作能力,从而优化传统CMS的底层逻…...
我用 Cursor 开发了一款个人小记系统
https://note.iiter.cn 项目背景 在日常工作和学习中,我们经常需要快速记录一些想法、收藏一些有用的链接或者保存一些重要的文本、图片内容。虽然市面上已经有很多笔记软件,但我想要一个更轻量、更简单的工具,专注于快速记录和智能检索。于是我开发了这款个人小记系统。 系统…...
百问网(100ask)提供的烧写工具的原理和详解;将自己编译生成的u-boot镜像文件烧写到eMMC中
百问网(100ask)提供的烧写工具的原理 具体的实现原理见链接 http://wiki.100ask.org/100ask_imx6ull_tool 为了防止上面这个链接失效,我还对上面这个链接指向的页面保存成了mhtml文件,这个mhtml文件的百度网盘下载链接: https://pan.baidu.c…...
【权威预警】奇点智能研究院SITS大会发布AI系统韧性新标准:92.7%故障自愈率背后,是这5个被忽视的监控盲区
更多请点击: https://intelliparadigm.com 第一章:奇点智能研究院最新动态:SITS大会 奇点智能研究院于2024年9月正式发布SITS(Smart Intelligence & Trustworthy Systems)年度技术大会成果,聚焦可信AI…...
wxauto终极指南:3步打造Windows微信自动化机器人
wxauto终极指南:3步打造Windows微信自动化机器人 【免费下载链接】wxauto Windows版本微信客户端(非网页版)自动化,可实现简单的发送、接收微信消息,简单微信机器人 项目地址: https://gitcode.com/gh_mirrors/wx/wx…...
别再只ping 127.0.0.1了!这5个环回地址的隐藏用法,开发测试效率翻倍
解锁127.0.0.0/8:开发者必备的环回地址高阶用法手册 当你在终端输入ping 127.0.0.1看到"Reply from 127.0.0.1"时,是否想过这个熟悉的地址背后还隐藏着整个未被充分利用的地址王国?作为开发者,我们每天都在与环回地址打…...
别再只用Wireshark了!用Java+Jpcap手撸一个实时网络流量监控工具(附IDEA项目源码)
从零构建Java网络流量监控系统:超越Wireshark的轻量级解决方案 在当今分布式系统和微服务架构盛行的时代,对网络流量的实时监控已成为开发者必备的技能。虽然Wireshark等成熟工具提供了全面的功能,但对于需要深度定制或希望将网络监控能力集成…...
FABulous嵌入式FPGA生成框架:从CSV定义到GDSII流片的完整指南
1. 项目概述与核心价值 如果你是一名硬件工程师,正在为一个SoC项目寻找一个可嵌入的、可定制的FPGA模块,或者你是一个研究者,希望探索不同工艺节点下FPGA架构的潜力,那么FABulous这个名字很可能已经出现在你的雷达上。简单来说&a…...
StreamFX实战进阶:如何解决OBS直播画面效果单一的深度指南
StreamFX实战进阶:如何解决OBS直播画面效果单一的深度指南 【免费下载链接】obs-StreamFX StreamFX is a plugin for OBS Studio which adds many new effects, filters, sources, transitions and encoders! Be it 3D Transform, Blur, complex Masking, or even c…...
解决TranslucentTB启动失败的3种高效方案:让Windows任务栏透明化不再困扰
解决TranslucentTB启动失败的3种高效方案:让Windows任务栏透明化不再困扰 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB Tra…...
3分钟学会:如何将网页LaTeX公式完美复制到Word文档?
3分钟学会:如何将网页LaTeX公式完美复制到Word文档? 【免费下载链接】LaTeX2Word-Equation Copy LaTeX Equations as Word Equations, a Chrome Extension 项目地址: https://gitcode.com/gh_mirrors/la/LaTeX2Word-Equation 你是否曾为了一篇论文…...
知识付费选型新局:课堂街、小鹅通与海豚知道的深度解析
在2026年的当下,知识付费行业早已过了“有网就能卖课”的草莽时期。对于教育者和内容创作者而言,选对工具不仅关乎功能的实现,更决定了流量的承接效率与变现的利润率。目前市场上,课堂街、小鹅通、海豚知道构成了三足鼎立的格局。…...
游戏服务器容器化部署:基于Docker的Archon镜像实战指南
1. 项目概述:一个为游戏服务器量身定制的容器化部署方案如果你和我一样,曾经被游戏服务器的部署、迁移和运维搞得焦头烂额,那么看到SufficientDaikon/archon这个项目,你可能会和我当初一样眼前一亮。这本质上是一个为特定游戏&…...
