在 Powershell 中执行时,语句块或类型定义中缺少结束“}”

在 Powershell 中执行时,语句块或类型定义中缺少结束“}”

我是 powershell 新手。当我尝试执行以下代码时,出现错误:

“语句块或类型定义中缺少结束‘}’。”

下面是代码,我不确定我遗漏了哪里。

$path = "C:\Users\Dr.Salya\Downloads"
$filename = "rateonlyl-455.zip"

$url = "https://vertexinc.custhelp.com/app/utils/login_form"
$url2 = "https://download-ie.flexnetoperations.com/512175/1386/77/17129077/rateonlyl-455.zip?ftpRequestID=2321180473&server=download-ie.flexnetoperations.com&dtm=DTM20200820125043ODA0MDU5NDEz&authparam=1597953043_bf5ca04b9a74eeb53a272c20ea148517&ext=.zip/"

$ie = New-Object -com InternetExplorer.Application

$ie.visible = $true
$ie.silent = $false

$ie.navigate("$url")

while($ie.ReadyState -ne 4){start-sleep -m 100}
if ($ie.document.url -Match "invalidcert"){
$sslbypass=$ie.Document.getElementsByTagName("a") | where-object {$_.id -eq "overridelink"}
    $sslbypass.click()
    start-sleep -s 5
    }
 

$ie.Document.IHTMLDocument3_getElementById("username").click()
$ie.Document.IHTMLDocument3_getElementById("username").value ='********'
$ie.Document.IHTMLDocument3_getElementById("password").click()
$ie.Document.IHTMLDocument3_getElementById("password").value ='1234'
$ie.Document.IHTMLDocument3_getElementById("").click()

start-sleep 5

$ie.navigate($url2)

start-sleep 10

$ie.Document.body.outerHTML | Out-File -FilePath $path/$filename

错误:

You cannot call a method on a null-valued expression.
At C:\Users\Dr.Salya\Downloads\Vertex1.ps1:22 char:1
+ $ie.Document.IHTMLDocument3_getElementById("username").click()
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull
 
The property 'value' cannot be found on this object. Verify that the property exists and can be set.
At C:\Users\Dr.Salya\Downloads\Vertex1.ps1:23 char:1
+ $ie.Document.IHTMLDocument3_getElementById("username").value ='nnaisv ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : PropertyNotFound
 
You cannot call a method on a null-valued expression.
At C:\Users\Dr.Salya\Downloads\Vertex1.ps1:24 char:1
+ $ie.Document.IHTMLDocument3_getElementById("password").click()
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull
 
The property 'value' cannot be found on this object. Verify that the property exists and can be set.
At C:\Users\Dr.Salya\Downloads\Vertex1.ps1:25 char:1
+ $ie.Document.IHTMLDocument3_getElementById("password").value ='Vertex ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : PropertyNotFound
 
You cannot call a method on a null-valued expression.
At C:\Users\Dr.Salya\Downloads\Vertex1.ps1:26 char:1
+ $ie.Document.IHTMLDocument3_getElementById("").click()
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

答案1

您必须抓取页面以确保获取正确的对象/元素,并一次执行一个用例。以及对象/元素是否具有解决用例所需的属性和方法。

例如,仅使登录功能正常运行。

# $path     = "C:\Users\Dr.Salya\Downloads"
# $filename = "rateonlyl-455.zip"

$url  = "https://vertexinc.custhelp.com/app/utils/login_form"
# $url2 = "https://download-ie.flexnetoperations.com/512175/1386/77/17129077/rateonlyl-455.zip?ftpRequestID=2321180473&server=download-ie.flexnetoperations.com&dtm=DTM20200820125043ODA0MDU5NDEz&authparam=1597953043_bf5ca04b9a74eeb53a272c20ea148517&ext=.zip/"

$ie = New-Object -com InternetExplorer.Application

$ie.visible = $true
$ie.silent = $false
$ie.navigate($url)
while($ie.ReadyState -ne 4){start-sleep -m 100}

if ($ie.document.url -Match "invalidcert")
{
    $sslbypass = $ie.Document.getElementsByTagName('a') | 
                 where-object {$_.id -eq "overridelink"}
    $sslbypass.click()
    start-sleep -s 5
}
 
$ie.Document.forms | 
Select-Object className, id, tagName, innerText, outerText 
# Results
<#
className : rn_OpenLoginForm rn_OAuthForm
id        : rn_OpenLogin_6_Info
tagName   : FORM
innerText :  
            
            What will happen:
            When you click on this button you will be taken to Yahoo. 
            Once you log in, Yahoo will verify you and send you back here where 
            you'll be logged in! 
outerText :  
            
            What will happen:
            When you click on this button you will be taken to Yahoo. 
            Once you log in, Yahoo will verify you and send you back here where 
            you'll be logged in! 

className : 
id        : rn_LoginForm_7_Form
tagName   : FORM
innerText : Username (Your email address)
            
            Password
            
             
outerText : Username (Your email address)
            
            Password
#>

$ie.Document.forms.item('rn_LoginForm_7_Form') | 
Select-Object -Property className, Name, id, Type, Value, ie9_tagName | 
Format-Table -AutoSize
# Results
<#
className name             id                      type     value  ie9_tagName
--------- ----             --                      ----     -----  -----------
          Contact.Login    rn_LoginForm_7_Username text            INPUT      
          Contact.Password rn_LoginForm_7_Password password        INPUT      
                           rn_LoginForm_7_Submit   submit   Log In INPUT 
#>


$ie.Document.getElementById('rn_LoginForm_7_Username').Value = 'SomeUserName'
$ie.Document.getElementById('rn_LoginForm_7_Password').Value = 'Password'
$ie.Document.getElementById('rn_LoginForm_7_Submit').Click()

... 然后转到下一页(如果有的话),就像这个网站一样。但是,由于我没有这个网站的账户,所以我无法执行进一步的操作。但是,即使从登录页面拉出链接列表,对于任何后续页面来说都是相同的。

$ie.Document.links | 
ForEach-Object {
[PSCustomObject]@{
    className   = $PSItem.className
    tagName     = $PSItem.tagName
    innerText   = $PSitem.innerText
    outerText   = $PSitem.outerText
    href        = $PSItem.href 
    ClickMethod = $PSItem.Click
}}

# Results
<#

className   : 
tagName     : A
innerText   :  | myVertex
outerText   :  | myVertex
href        : javascript:void
ClickMethod : void click ()

className   : rn_LoginProvider rn_Yahoo
tagName     : A
innerText   : Yahoo
outerText   : Yahoo
href        : javascript:void(0)
ClickMethod : void click ()

className   : 
tagName     : A
innerText   : Forgot your password?
outerText   : Forgot your password?
href        : https://vertexinc.custhelp.com/app/utils/account_assistance/session/L3RpbWUvMTU5ODA0OTI1Ni9nZW4vMTU5ODA0OTI1Ni9zaWQvZlU4S0VoTlNVd2lJVjh1bmZDcTVVUHFvWWRF
              TFZOVDVPU3JNYXJWeWV3SXdsYSU3RUclN0VjQ3VOc1BTaWtxbGFmMkFKclY0bGZYcTZaa1B4T1g1cF9ISVhRbVpwaXF5c3ZQbUVIYVNjckhLR3ByazNYRDNfaDBQQVZXQSUyMSUyMQ%3D%3D
ClickMethod : void click ()

className   : 
tagName     : A
innerText   : Sign Up
outerText   : Sign Up
href        : https://vertexinc.custhelp.com/app/utils/create_account/redirect/utils%252Faccount_confirmation/session/L3RpbWUvMTU5ODA0OTI1Ni9nZW4vMTU5ODA0OTI1Ni9zaWQv
              ZlU4S0VoTlNVd2lJVjh1bmZDcTVVUHFvWWRFTFZOVDVPU3JNYXJWeWV3SXdsYSU3RUclN0VjQ3VOc1BTaWtxbGFmMkFKclY0bGZYcTZaa1B4T1g1cF9ISVhRbVpwaXF5c3ZQbUVIYVNjckhLR3ByazNY
              RDNfaDBQQVZXQSUyMSUyMQ%3D%3D
ClickMethod : void click ()

className   : 
tagName     : A
innerText   :  
outerText   :  
href        : https://vertexinc.custhelp.com/app/home/session/L3RpbWUvMTU5ODA0OTI1Ni9nZW4vMTU5ODA0OTI1Ni9zaWQvZlU4S0VoTlNVd2lJVjh1bmZDcTVVUHFvWWRFTFZOVDVPU3JNYXJWeWV3
              SXdsYSU3RUclN0VjQ3VOc1BTaWtxbGFmMkFKclY0bGZYcTZaa1B4T1g1cF9ISVhRbVpwaXF5c3ZQbUVIYVNjckhLR3ByazNYRDNfaDBQQVZXQSUyMSUyMQ%3D%3D
ClickMethod : void click ()

className   : 
tagName     : A
innerText   : Privacy Policy
outerText   : Privacy Policy
href        : javascript:showPrivacyPolicy();
ClickMethod : void click ()

className   : 
tagName     : A
innerText   : Terms of Use
outerText   : Terms of Use
href        : javascript:showTerms();
ClickMethod : void click ()

className   : 
tagName     : A
innerText   :   Contact: 1-800-281-1900
outerText   :   Contact: 1-800-281-1900
href        : tel:1-800-281-1900
ClickMethod : void click ()

className   : 
tagName     : A
innerText   : 
outerText   : 
href        : https://www.facebook.com/vertexinc1/
ClickMethod : void click ()

className   : 
tagName     : A
innerText   : 
outerText   : 
href        : https://twitter.com/vertexinc
ClickMethod : void click ()

className   : 
tagName     : A
innerText   : 
outerText   : 
href        : https://www.linkedin.com/company/vertex-inc.
ClickMethod : void click ()

className   : 
tagName     : A
innerText   : 
outerText   : 
href        : https://www.youtube.com/user/vertexinc
ClickMethod : void click ()         
#>

$ie.Document.links | 
Select-Object -Property outerText, href
# Results
<#
outerText             href                                                                                           
---------             ----                                                                                           
 | myVertex           javascript:void                                                                                
Yahoo                 javascript:void(0)                                                                             
Forgot your password? https://vertexinc.custhelp.com/app/utils/account_assistance                                    
Sign Up               https://vertexinc.custhelp.com/app/utils/create_account/redirect/utils%252Faccount_confirmation
                      https://vertexinc.custhelp.com/app/home/                                                       
Privacy Policy        javascript:showPrivacyPolicy();                                                                
Terms of Use          javascript:showTerms();                                                                        
  Contact: 1-800-2... tel:1-800-281-1900                                                                             
                      https://www.facebook.com/vertexinc1/                                                           
                      https://twitter.com/vertexinc                                                                  
                      https://www.linkedin.com/company/vertex-inc.                                                   
                      https://www.youtube.com/user/vertexinc 
#>


$ie.Document.getElementsByTagName('A')[4] | 
ForEach-Object {
[PSCustomObject]@{
    className   = $PSItem.className
    id          = $PSItem.id
    tagName     = $PSItem.tagName
    innerText   = $PSitem.innerText
    outerText   = $PSitem.outerText
    href        = $PSItem.href 
    ClickMethod = $PSItem.Click
}}
# Results
<#
className   : 
id          : 
tagName     : A
innerText   : Sign Up
outerText   : Sign Up
href        : https://vertexinc.custhelp.com/app/utils/create_account/redirect/utils%252Faccount_confirmation
ClickMethod : void click ()
#>


($ie.Document.getElementsByTagName('A') | 
Where outerText -eq 'Forgot your password?').Click()
    
($ie.Document.getElementsByTagName('A') | 
Where outerText -eq 'Sign Up').Click()

最后,你可以让允许自动化的网站实现自动化。有些网站不允许自动化其属性(或属性的一部分),它们会主动对其进行编码以防止自动化。

相关内容