我运行了这个powershell脚本从网站下载图像(下载它,必须执行某些步骤,这就是我使用IE导航的原因)。我把一个随机字符串放在4到4个字符之间。
但是我收到一个错误,它甚至没有开始用字符串填充空白:
Exception from HRESULT: 0x800A01B6 At E:\getbd.ps1:13 char:1 + $ie.Document.getElementsByTagName("text") | where { $.name -eq "words ...
以下是代码:
$url = "https://fakecaptcha.com"
$set = "abcdefghijklmnopqrstuvwxyz0123456789".ToCharArray()
for($i=1; $i -le 4; $i++){
$result += $set | Get-Random}
$result += ' '
for($i=1; $i -le 4; $i++){
$result += $set | Get-Random}
$ie = New-Object -comobject InternetExplorer.Application
$ie.visible = $true
$ie.silent = $true
$ie.Navigate( $url )
while( $ie.busy){Start-Sleep 1}
$ie.Document.getElementsByTagName("text") | where { $.name -eq "words" }.value = $result
$generateBtn = $ie.Document.getElementsById('input') | Where-Object {$_.Type -eq 'submit' -and $_.Value -eq 'Create it now!'}
$generateBtn.click()
while( $ie.busy){Start-Sleep 1}
$readyBtn = $ie.Document.getElementsById('input') | Where-Object {$_.Type -eq 'button' -and $_.Value -eq 'Your captcha is done! Please click here to view it!!'}
$readyBtn.click()
while( $wc.busy){Start-Sleep 1}
$downloadBtn = $ie.Document.getElementsById('input') | Where-Object {$_.Type -eq 'button' -and $_.Value -eq 'DOWNLOAD'}
$downloadBtn.click()
while( $ie.busy){Start-Sleep 1}
$source = $ie.document.getElementsByTagName('img') | Select-Object -ExpandProperty src
$file = '$E:\bdlic\'+$result+'.jpg'
$wc = New-Object System.Net.WebClient
$wc.DownloadFile($source,$file)
while( $wc.busy){Start-Sleep 1}
$ie.quit()
答案 0 :(得分:1)
该行中有2个语法错误:
$ie.Document.getElementsByTagName("text") | where { $.name -eq "words" }.value = $result
# ^ ^^^^^^
$.Name
:“当前对象”变量为$_
,而不仅仅是$
。where {...}.value
:您不能在Where-Object
语句的scriptblock上使用点符号。您需要将整个语句放在(子)表达式中。将行更改为:
($ie.Document.getElementsByTagName("text") | where { $_.name -eq "words" }).value = $result