我是PowerShell脚本新手,我被困在一个页面,我需要点击一个链接,将我重定向到下一页。我尝试了许多组合,例如childNodes
/通过id
直接获取它。但它们似乎都没有起作用。
网页摘要:
<div id="id1" blablabla role="role1" aria-label="Redirect">
<table role="role2" blabla>
<tbody>
<tr>
<td class="class1" blabla>
<div id="id2" blabla>Redirect</div>
</td>
</tr>
</tbody>
</table>
</div>
我的代码:
$div = $ie.Document.getElementById("id1")
$table = $div.childNodes |? {$_.tagName -eq "table"}
$tbody = $table.childNodes |? {$_.tagName -eq "tbody"}
$tr = $tbody.childNodes |?{$_.tagName -eq "tr"}
$td = $tr.childNodes |?{$_.tagName -eq "td"}
$link = $td.childNodes |? {$_.tagName -eq "div"} |? {$_.innerText -match "Redirect"}
$link.click()
代码块2:
$link = $ie.Document.getElementById("id2")
$link.click()
以上两个代码块都会抛出与下面相同的错误。
You cannot call a method on a null-valued expression.
At *path* char:1
+ $td.click()
+ ~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
如何解决此问题?
答案 0 :(得分:0)
如果您要点击链接,则需要找到href
属性,这是链接,并在其上执行Invoke-WebRequest
。
<a class="header-nav-link notification-indicator tooltipped tooltipped-s js-socket-channel js-notification-indicator" aria-label="You have unread notifications" href="/notifications" data-ga-click="Header, go to notifications, icon:unread" data-hotkey="g n" data-channel="tenant:1:notification-changed:*****">
<span class="mail-status unread"></span>
<svg xmlns="http://www.w3.org/2000/svg" class="octicon octicon-bell" aria-hidden="true" viewBox="0 0 14 16" width="14" height="16" version="1.1"><path d="M 14 12 v 1 H 0 v -1 l 0.73 -0.58 c 0.77 -0.77 0.81 -2.55 1.19 -4.42 C 2.69 3.23 6 2 6 2 c 0 -0.55 0.45 -1 1 -1 s 1 0.45 1 1 c 0 0 3.39 1.23 4.16 5 c 0.38 1.88 0.42 3.66 1.19 4.42 l 0.66 0.58 H 14 Z m -7 4 c 1.11 0 2 -0.89 2 -2 H 5 c 0 1.11 0.89 2 2 2 Z" /></svg>
</a>
以下是来自GitHub通知按钮的示例html,您可以看到svg包含在<a>
标记中,如果您想点击&#39;那个svg,刚刚在href
标签上找到了<a>
属性(你可以用| select expand-property 'href'
执行此操作)
然后执行Invoke-WebRequest
以获取该网址的内容
答案 1 :(得分:0)
文档在调用该代码块时是否已完全加载?
在寻找elem之前,等待加载
while($ie.busy) {sleep 1};