PowerShell如何点击href为javascript:;的链接下载JS生成的压缩包
解决方案
方案1:使用Selenium模拟浏览器操作(推荐,适配JS渲染页面)
该方案可以直接复用你已有的登录逻辑,同时解决元素定位、下载弹窗两个问题。
- 元素定位:通过按钮的
data-ng-click属性和文本特征组合匹配,不需要专属ID或Tag - 下载弹窗处理:提前配置浏览器默认下载路径,禁用保存提示,文件会自动存入指定目录
代码示例
# 提前安装Selenium PowerShell模块,执行命令:Install-Module Selenium -Scope CurrentUser Import-Module Selenium # 配置Chrome浏览器选项 $chromeOptions = New-Object OpenQA.Selenium.Chrome.ChromeOptions # 替换为你要保存文件的本地路径 $savePath = "C:\PostFileDownload" $chromeOptions.AddUserProfilePreference("download.default_directory", $savePath) # 禁用下载确认弹窗 $chromeOptions.AddUserProfilePreference("download.prompt_for_download", $false) $chromeOptions.AddUserProfilePreference("safebrowsing.enabled", $true) # 启动浏览器 $driver = New-Object OpenQA.Selenium.Chrome.ChromeDriver($chromeOptions) # 此处复用你已实现的登录逻辑,登录目标页面即可 # ----- 你的登录代码 start ----- # $driver.Url = "目标页面地址" # ..... # ----- 你的登录代码 end ----- # 等待下载按钮渲染完成,避免页面未加载导致定位失败 $wait = New-Object OpenQA.Selenium.Support.UI.WebDriverWait($driver, [TimeSpan]::FromSeconds(10)) $downloadButton = $wait.Until({ # 通过属性和文本组合定位按钮 $driver.FindElementByXPath("//a[@data-ng-click='checkForFileAndDownload(getVersionForCurrentLanguage(file.versions))' and starts-with(normalize-space(text()),'post_adressdaten')]") }) # 触发点击下载 $downloadButton.Click() # 等待下载完成,可根据文件大小调整等待时长,或添加判断文件是否存在的逻辑 Start-Sleep -Seconds 20 # 关闭浏览器进程 $driver.Quit()
方案2:抓包获取下载直链,直接调用接口下载
JS触发下载本质是向后端发送请求获取文件,你可以通过抓包拿到直链后直接用PowerShell内置方法下载,不需要依赖浏览器。
操作步骤:
- 打开浏览器F12开发者工具,切换到「网络」面板,勾选「保留日志」选项
- 手动点击下载按钮,在网络请求列表中筛选返回类型为
application/zip的请求 - 复制该请求的URL、请求头、参数,以及登录后的会话Cookie
- 用
Invoke-WebRequest直接请求该接口保存文件
代码示例
# 替换为你抓包得到的对应参数 $downloadApiUrl = "抓包获取的下载接口地址" $requestHeaders = @{ # 抓包得到的请求头信息,如Authorization、Referer等 } # 如果你用Invoke-WebRequest登录过,可以直接复用当时的-WebSession变量 $loginSession = $你登录时保存的会话变量 $outputFilePath = "C:\PostFileDownload\post_adressdaten.zip" Invoke-WebRequest -Uri $downloadApiUrl -Headers $requestHeaders -WebSession $loginSession -OutFile $outputFilePath
内容的提问来源于stack exchange,提问作者Francesco Mantovani
相关产品推荐
相关产品推荐

