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