使用Powershell从网站下载Excel文档

时间:2018-02-15 10:21:14

标签: powershell

最近我开始学习PowerShell来自动完成我的工作任务。

所以我想访问一个网页,然后点击一个自动下载Excel文件的按钮。这是我要点击的按钮:

<div class="NormalButton">

<a class="ActiveLink" title="Excel" alt="Excel" onclick="$find('ctl32').exportReport('EXCELOPENXML');" href="javascript:void(0)" style="padding:3px 8px 3px 8px;display:block;white-space:nowrap;text-decoration:none;">Excel</a>

</div>

这将是我的PowerShell脚本:

$ie = New-Object -com "InternetExplorer.Application"
$ie.Navigate("http://test.test/")
$ie.Visible = $true
$link = $ie.Document.getElementsByTagName('a') | Where-Object {$_.onclick -eq "$find('ctl32').exportReport('EXCELOPENXML');"}
$link.click()

如果我尝试从控制台运行它,我会收到错误“你无法在空值表达式上调用方法。”

如果它有用我正在使用PowerShell 4.0,并且网页有延迟,直到加载报告。

2 个答案:

答案 0 :(得分:0)

我认为你的问题是因为你正在使用Double Quotes,它会像变量一样威胁它并尝试扩展它,所以尝试将它改为单引号,来自:

$link = $ie.Document.getElementsByTagName('a') | Where-Object {$_.onclick -eq "$find('ctl32').exportReport('EXCELOPENXML');"}

为:

$link = $ie.Document.getElementsByTagName('a') | Where-Object {$_.onclick -eq '$find('ctl32').exportReport('EXCELOPENXML');'}

此外,您可以将-eq更改为-match,并将其中的一部分更改为:

$_.onclick -match '$find('ctl32').exportReport'

有关详细信息,请参阅:About Quoting Rules

答案 1 :(得分:0)

我已通过以下代码完成了它:

[void][System.Reflection.Assembly]::LoadWithPartialName("'System.Windows.Forms")
[void][System.Reflection.Assembly]::LoadWithPartialName("'Microsoft.VisualBasic")


$url = "https://webpage.com"


$ie = New-Object -com internetexplorer.application
$ie.navigate($url)
$ie.StatusBar = $false
$ie.ToolBar = $false
$ie.visible = $true



#Get Excel

Start-Sleep -s 40


$btnExcel = $ie.Document.links | where-object { $_.outerText -eq 'Excel' -and $_.innerText -eq 'Excel' }
$btnExcel.click()



# Get Internet Explorer Focus

Start-Sleep -s 5

[Microsoft.VisualBasic.Interaction]::AppActivate("internet explorer")
[System.Windows.Forms.SendKeys]::SendWait("{F6}");
[System.Windows.Forms.SendKeys]::SendWait("{TAB}");
[System.Windows.Forms.SendKeys]::SendWait(" ");
Start-Sleep 1
[System.Windows.Forms.SendKeys]::SendWait("$file");
[System.Windows.Forms.SendKeys]::SendWait("{ENTER}");



# Get Internet Explorer Focus

Start-Sleep -s 1

[Microsoft.VisualBasic.Interaction]::AppActivate("internet explorer")
[System.Windows.Forms.SendKeys]::SendWait("^{F4}");

谢谢大家的时间:)