0

我得到了一个包含一千个 mac 地址的列表来查找它们属于哪个公司。

我不想手动搜索http://standards.ieee.org/develop/regauth/oui/public.html,而是想从文件中读取每个mac地址并将组织输出到另一个文件中。

现在,这是 powershell 脚本的样子:

 $mac = '00-00-00'  
 $ie = New-Object -ComObject InternetExplorer.Application
 $ie.Visible = $true
 $ie.navigate('http://standards.ieee.org/develop/regauth/oui/public.html')

 while($ie.Busy){sleep -mil 100}


 $ie.Document.getElementById("x").value=$mac
 $ie.Document.getElementById("submit").Click()

当我运行脚本时,它会启动网站http://standards.ieee.org/develop/regauth/oui/public.html,并在文本框中打印“00-00-00”,但没有点击提交按钮”

以下是该网站的相关来源:

<input name="x" size="30" type="text" value="" /><input name="submit2" type="submit" value="Search!" />

1)如何让它“点击” 2)如何将输出写入某处(即控制台、文件等)

谢谢!

编辑:

我注意到以下错误输出到控制台:

您不能在空值表达式上调用方法。

At C:\sandbox\get-org.ps1:11 char:46
+      $ie.Document.getElementById("submit").Click <<<< ()
    + CategoryInfo          : InvalidOperation: (Click:String) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull
4

1 回答 1

3

在这种情况下,自动化 Internet Explorer 是多余的。IEEE 支持更友好的 URL 语法,您只需将 OUI 作为请求的一部分嵌入:

$mac = "00-01-02"
$wc = New-Object System.Net.WebClient
$html = $wc.DownloadString("http://standards.ieee.org/cgi-bin/ouisearch?$mac")

$html变量包含搜索结果页面的非常简短的 HTML。您可以根据需要进一步过滤或处理它。

请注意:他们可能有一些限制或其他服务使用条款,因此您可能不想像 PowerShell 那样快地向服务器发出请求。考虑Start-Sleep 1在每个查询之后添加一个以将请求延迟一秒,以减轻您突然在他们的服务上创建的负载。

于 2013-09-18T03:47:13.290 回答