Powershell:无法在空值表达式上调用方法

如何解决Powershell:无法在空值表达式上调用方法

每个人,我刚开始学习Powershell,现在我刚刚开始练习一些脚本,我以为我的第一个脚本应该是一个脚本,它可以让我打开浏览器,单击登录名,填写信息,登录我,然后在我的工作单位中登录。

这是我到目前为止编写的代码:

    $ie = New-Object -com InternetExplorer.Application #åbner internet explorer
    $ie.visible=$true #gør den synlig
    
    $ie.navigate('https://itd-skp.sde.dk/')
    
    while ($ie.Busy -eq $true){Start-Sleep -seconds 4;}
    
    $link = $ie.Document.getElementsByTagname('A') | Where-Object {$_.innerText -eq 'Log ind'}
    $link.click()

This is the webpage i want it to click on

This is the Line of code,that is referencing the link that needs to be clicked

这是我可以访问的所有网站代码,所以我希望足够。

我在编码和Powershell上都很烂,因为我对此很陌生(这基本上是我的第二天),所以如果我可以得到愚蠢的版本,那就太好了。

现在我的问题是,在这种情况下,如何为$ link函数添加值?如何单击底部的按钮?

解决方法

继续我的评论...

有些站点只是不允许或禁止自动化,然后有些站点您所看到的并不是真正的。你必须去挖掘它。例如,您显示的URL有很多类和Divs,框架。因此,如果您追求的是嵌入其中,则需要更多代码。

您还需要深入研究如何抓取网站以查看可以使用的对象。

一个简单的刮痕显示了这一点...

# Scrape the site for object info.
$url = 'https://itd-skp.sde.dk'
($WebSite = Invoke-WebRequest -Uri $url -SessionVariable fe) 
$WebSite.Links
# Results
<#
innerHTML : Registrering lukket
innerText : Registrering lukket
outerHTML : <a class="col-xs-12 btn btn-primary btn-load btn-lg disabled" role="button" style="cursor: not-allowed;" href="javascript:void(0);">Registrering 
            lukket</a>
outerText : Registrering lukket
tagName   : A
class     : col-xs-12 btn btn-primary btn-load btn-lg disabled
role      : button
style     : cursor: not-allowed;
href      : javascript:void(0);

innerHTML : 
                                        Log ind
innerText :  Log ind
outerHTML : <a class="col-xs-12 btn btn-primary btn-load btn-lg" href="admin/login.php">
                                        Log ind</a>
outerText :  Log ind
tagName   : A
class     : col-xs-12 btn btn-primary btn-load btn-lg
href      : admin/login.php
#>

加载并使用网站上的信息

$IE = New-Object -ComObject 'InternetExplorer.Application'
$FormElementsequestURI = 'https://itd-skp.sde.dk'

$IE.Visible = $true
$IE.Silent  = $true
$IE.Navigate($FormElementsequestURI)
While ($IE.Busy) {Start-Sleep -Milliseconds 100}
$Doc  = $IE.Document
<#
$Doc.getElementsByTagName('a')

# Or simply 

$Doc.links | 
Select-Object -Property className,id,tagname,innertext,outertext,href,ie8_href
# Results
<#
className : col-xs-12 btn btn-primary btn-load btn-lg disabled
id        : 
tagName   : A
innerText : Registrering lukket
outerText : Registrering lukket
href      : javascript:void(0);
ie8_href  : javascript:void(0);

className : col-xs-12 btn btn-primary btn-load btn-lg
id        : 
tagName   : A
innerText :  Log ind
outerText :  Log ind
href      : https://itd-skp.sde.dk/admin/login.php
ie8_href  : https://itd-skp.sde.dk/admin/login.php
#>

逐步浏览元素以查找具有点击方法的

$Doc.links | 
ForEach-Object {
[PSCustomObject]@{
    className   = $PSItem.className
    tagName     = $PSItem.tagName
    innerText   = $PSitem.innerText
    outerText   = $PSitem.outerText
    href        = $PSItem.href 
    ClickMethod = $PSItem.Click
}} | Format-Table -AutoSize
# Results
<#
className                                          tagName innerText           outerText           href                                   ClickMethod       
---------                                          ------- ---------           ---------           ----                                   -----------       
col-xs-12 btn btn-primary btn-load btn-lg disabled A       Registrering lukket Registrering lukket javascript:void(0);                    System.__ComObject
col-xs-12 btn btn-primary btn-load btn-lg          A        Log ind             Log ind            https://itd-skp.sde.dk/admin/login.php System.__ComObject
#>

请注意,返回的数组中有多个'A',它们从零开始,但是在这种情况下,您只希望第二个在此位置,但这实际上是在索引1处,而不是2。

# Or

($Doc.getElementsByTagName('A') | 
Get-Member -MemberType Method) -match 'click'
# Results
<#
   TypeName: System.__ComObject#{3050f502-98b5-11cf-bb82-00aa00bdce0b}

Name  MemberType Definition   
----  ---------- ----------   
click Method     void click ()
#>

但是,请注意“ Log ind”的文本呈现方式。

(($Doc.getElementsByTagName('A')[1]).outerText).Length
# Results
<#
8
#>

(($Doc.getElementsByTagName('A')[1]).innerText).Length
# Results
<#
8
#>

有空格。因此,不包含空格的'-eq'将找不到它。

如前所述,引用正确的对象将授予对click方法的访问权限。但是如图所示,它们又回来了……

$Doc.links[1].click()
# Results
<#
System.__ComObject
#>

$Link = $Doc.getElementsByTagName('A') | 
Where-Object {$PSItem.href -eq 'https://itd-skp.sde.dk/admin/login.php'}
# Results
<#
System.__ComObject
#>

因此,所有这些,本网站仅适用于此。

$IE = New-Object -ComObject 'InternetExplorer.Application'
$FormElementsequestURI = 'https://itd-skp.sde.dk'

$IE.Visible = $true
$IE.Silent  = $true
$IE.Navigate($FormElementsequestURI)
While ($IE.Busy) {Start-Sleep -Milliseconds 100}
$Doc  = $IE.Document
$Doc.links[1].click()

这只会使您通过主登录页面(按您发布的查询)。处理新页面是一项新的尝试。

再次,通过我在原始注释中调用的指针,花必要的时间来加快PowerShell的运行速度。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-