我正在尝试捕获我们内部网上的 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> HW Status</A> : EOL HW<SPAN style="FONT-WEIGHT: lighter; DISPLAY: inline-block"> (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> 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> HW Status</A> : Approved Model<SPAN style="FONT-WEIGHT: lighter; DISPLAY: inline-block"> (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> HW Status</A> : EOL HW<SPAN style="FONT-WEIGHT: lighter; DISPLAY: inline-block"> (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 " 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&ListId={5696DF31-E236-4F3F-8EE2-90707DADC0EA}&ID=4&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> </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> </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>