我如何点击表格中的<div>标签?

时间:2016-06-26 07:07:57

标签: javascript powershell powershell-v2.0

我是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

如何解决此问题?

2 个答案:

答案 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};