Webscraping на странице монитора PowerShell - PullRequest
1 голос
/ 11 октября 2011

Я хочу иметь возможность отслеживать веб-страницу состояния моих принтеров и получать по электронной почте скрипт, когда уровень чернил падает ниже 25%.Я уверен, что это можно сделать в Powershell, но я не знаю, как это сделать.

Это HTML-страница, о которой идет речь:

<h2>Supply Status</h2>

    <table class="matrix">
                <thead>
    <tr>
        <th>Supply Information</th>
        <th>Status</th>
    </tr>
    </thead>

    <tbody>
    <tr>
        <td>Black Toner</td>
        <td>End of life</td>
    </tr>
    <tr>
        <td>Cyan Toner</td>

        <td>Under 25%</td>
    </tr>
    <tr>
        <td>Magenta Toner</td>
        <td>Under 25%</td>
    </tr>
    <tr>

        <td>Yellow Toner</td>
        <td>Under 25%</td>
    </tr>
    </tbody>

    </table>
    <p>

Спасибо.

Адам

Ответы [ 2 ]

3 голосов
/ 11 октября 2011

Опираясь на ответ @ Джоуи, сделайте это с помощью пакета Agility HTML.

$html = new-object HtmlAgilityPack.HtmlDocument 
$result = $html.Load("http://full/path/to/file.htm") 
$colors = $html.DocumentNode.SelectNodes("//table[@class='matrix']//tbody/tr")
$result = $colors | % { 
    $color = $_.SelectSingleNode("td[1]").InnerText
    $level = $_.SelectSingleNode("td[2]").InnerText
    new-object PsObject -Property @{ Color = $color; Level = $level; } | 
        Select Color,Level
}
$result | Sort Level | ft -a

Это предполагает, что у вас уже есть пакет Agility HTML, загруженный в PowerShell. Мой загружен в мой профиль как:

[System.Reflection.Assembly]::LoadFrom( 
      (join-path $profileDirectory HtmlAgilityPack) 
       + "\HtmlAgilityPack.dll" ) | Out-Null

Используя приведенный пример HTML, ваш вывод выглядит следующим образом:

output from PowerShell script

На данный момент у вас есть выход и вы можете отправить его по электронной почте.

1 голос
/ 11 октября 2011

Самым простым способом, вероятно, будет HTML Agility Pack , который можно импортировать в PowerShell. Ли Холмс имеет небольшую статью, демонстрирующую простой пример с ним.По сути, вы используете XML-подобный API для доступа к HTML DOM.

...