沧州做网站推广揭阳专业网站设计公司
遇到一个问题,点击按钮自动下载文件,路径和文件名都不能自定义,可以用 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()
