如何使用 powershell 点击链接?

如何使用 powershell 点击链接?

我正在尝试捕获我们内部网上的 onclick。我的代码还不够完善,我不知道该怎么做,然后继续从网页获取信息。我从我们的内部网上得到了以下信息:

innerHTML                    : <TD class=ms-gb noWrap colSpan=100><A onclick="javascript:ExpCollGroup('7111-2_', 'img_7111-2_',event, false);return false;" href="javascript:"><IMG id=img_7111
                           -2_ alt=expand src="/_layouts/images/plus.gif" border=0>&nbsp;HW Status</A> : EOL HW<SPAN style="FONT-WEIGHT: lighter; DISPLAY: inline-block">&nbsp;‎(47) </SPAN
                           ></TD>
innerText                    :  HW Status : EOL HW ‎(47) 
outerHTML                    : 
                           <TR id=group0><TD class=ms-gb noWrap colSpan=100><A onclick="javascript:ExpCollGroup('7111-2_', 'img_7111-2_',event, false);return false;" href="javascript:"><I
                           MG id=img_7111-2_ alt=expand src="/_layouts/images/plus.gif" border=0>&nbsp;HW Status</A> : EOL HW<SPAN style="FONT-WEIGHT: lighter; DISPLAY: inline-block">&nbs
                           p;‎(47) </SPAN></TD></TR>
outerText                    :  HW Status : EOL HW ‎(47) 

这是我的代码:

Clear-Host
$HTML = Invoke-WebRequest -uri "http://share.mycompany.org/tools/desktopmanagement/Lists/Standard%20PC%   20Hardware/HW%20Status.aspx" -UseDefaultCredentials
$Rows = ($HTML.ParsedHtml.getElementsByTagName("td") | Where{ $_.className -eq 'ms-gb' } ).innerHTML
foreach($Row in $Rows) {
    $Row
}

这是我的输出 $Row

<A onclick="javascript:ExpCollGroup('860-1_', 'img_860-1_',event, false);return false;" href="javascript:"><IMG id=img_860-1_ alt=expand src="/_layouts/images/plus.gif" border=0>&nbsp;HW Status</A> : Approved Model<SPAN style="FONT-WEIGHT: lighter; DISPLAY: inline-block">&nbsp;‎(36) </SPAN>
<A onclick="javascript:ExpCollGroup('860-2_', 'img_860-2_',event, false);return false;" href="javascript:"><IMG id=img_860-2_ alt=expand src="/_layouts/images/plus.gif" border=0>&nbsp;HW Status</A> : EOL HW<SPAN style="FONT-WEIGHT: lighter; DISPLAY: inline-block">&nbsp;‎(47) </SPAN

我希望这足够了

答案1

基本上,你不能直接使用 Javascript。

JavaScript 由客户端浏览器程序:Internet Explorer、Firefox、Chrome 等。因此,为了执行它,您需要在浏览器内进行单击。

Powershell 可以设置表单变量并将其传递给服务器端通过调用 HTTP 请求进行处理,但为了解析页面并执行客户端 JavaScript,您需要一些支持 JavaScript 的 HTML 解析器。即浏览器。

在这种情况下通常的做法类似于网页抓取其中,为所需的页面运行专门的浏览器程序(通常是无头版的 chrome/firefox 或更专业的浏览器),然后使用信息对其进行编程,以模拟鼠标点击/键盘事件。

有单独的库可以将网页抓取功能集成到通用编程语言中。你也许可以利用它并从 Powershell 中控制它,但无论如何据我所知,PS 和网页之间还有另一层,没有它你就无法做到这一点。

另一种方法是在 Powershell 中重新编程相关的网页 Javscript 函数(例如示例中的 ExpCollGroup),但它可能需要来自网页的额外信息,这可能很难提取。

答案2

也许我不太了解网页的行为方式,但我试图成功搜索“Dell Optiplex 7010”并选择此文本“30/07/2017”。主题名称的原因是我第一次加载页面时无法在网页上看到以下来源。所以我有点不确定下面的来源是否只有在我按下链接时才存在。我在 IE 中按 F12 找到了以下来源。

<TR class=ms-itmhover iid="7043,4,0" setEdgeBorder="true">
<TD class="ms-vb-itmcbx ms-vb-firstCell"><INPUT title="Dell Optiplex 7010&#13;&#10;  " class=s4-itm-cbx type=checkbox value="" _setup="true"></TD>
<TD class=ms-vb2>Desktop</TD>
<TD height="100%" class=ms-vb-title onmouseover=OnChildItem(this)>
<DIV class="ms-vb itx" id=4 onmouseover=OnItem(this) EventType="" Perm="0xb008431061" Field="LinkTitle" CTXName="ctx7043"><A onclick="EditLink2(this,7043);return false;" onfocus=OnLink(this) href="http://share.intranet.org/tools/desktopmanagement/_layouts/listform.aspx?PageType=4&amp;ListId={5696DF31-E236-4F3F-8EE2-90707DADC0EA}&amp;ID=4&amp;ContentTypeID=0x0100FA254EECE740F54DA0D1B9E62EEDBB94" target=_self>Dell Optiplex 7010</A></DIV>
<DIV class=s4-ctx style="HEIGHT: 25px; LEFT: 830px; MARGIN: 0px; LINE-HEIGHT: 25px; TOP: 112px" onmouseover="OnChildItem(this.parentNode); return false;" shown="false"><SPAN>&nbsp;</SPAN><A title="Open Menu" onclick="PopMenuFromChevron(event); return false;" onfocus="OnChildItem(this.parentNode.parentNode); return false;" href="javascript:;"><IMG width=7 height=4 style="VISIBILITY: hidden" alt="Open Menu" src="/_layouts/images/ecbarw.png"></A><SPAN>&nbsp;</SPAN></DIV></TD>
<TD class=ms-vb2>EOL HW</TD>
<TD class=ms-vb2><NOBR>01/07/2012</NOBR></TD>
<TD class="ms-vb2 ms-vb-lastCell"><NOBR>30/07/2017</NOBR></TD></TR>

相关内容