Показать полную графическую версию : вытянуть информацию из html полученного через curl
Страниц :
1
2
[
3]
4
5
6
7
8
Griboed0ff
17-04-2020, 10:32
[pscustomobject]@{ »
попробовал ваш код, имеется ошибка. А по настройке примерно понятно, посидеть поиграться на другой страничке для понимания.
Griboed0ff
17-04-2020, 10:37
добавил сверху то, что рекомендовал DJ Mogarych. Теперь ошибка другая.
попробовал ваш код, имеется ошибка. »
Да, там была ошибка в наименовании переменной...
добавил сверху то, что рекомендовал DJ Mogarych. Теперь ошибка другая. »
Добавлю, чуть позже... там ещё, видимо, код придется переделать, чтобы не из файла получать данные, а скачивать его... в invoke-webrequest от рождения присутствует баг с кодировками, а т.к. тут присутствует кириллица, то код тот будет неправильно работать.
чуть позже... »
вот, прикрутил перебор адресов, стыренный у DJ Mogarych :)
ну и подкорректировал немного скрипт, плюс вывод в CSV
param (
#[parameter(Mandatory=$true)]
$encode = 65001,
[string]$outfile = 'out.csv',
[int]$number = 1 # номер таблицы
)
function convert ($from, $to){
begin{
$fenc = [text.encoding]::getencoding($from)
$tenc = [text.encoding]::getencoding($to)
}
process{
$a = $tenc.getbytes($_)
$fenc.getstring($a)
}
}
[net.servicepointmanager]::securityprotocol = 'ssl3,tls,tls11,tls12'
$ips = 130..190 |% {[string]$((Get-Netipaddress |? ipaddress -match "^10\.").ipaddress -replace "\d+$") + $_}
$ips|%{
$html = new-object -com "HTMLFile"
$html.ihtmldocument2_write($(irm $_|convert $encode 28591))
$tables = $html.getelementsbytagname("table")
$tbl = ($tables|?{($_.getelementsbytagname('table')|%{$_}).count -eq 0})[$number]|%{
$headers = @();
$tr = $_|%{$_.getelementsbytagname("tr")}
if($headers = $tr|?{$_.firstchild().tagname -eq 'th'}|
%{$_.getelementsbytagname("th")}|select -exp innertext){
$headers = $headers.trim()
} else {
$headers = 1..([linq.parallelenumerable]::max(
[linq.parallelenumerable]::asparallel($tr.lastchild().cellindex)
)+1)|%{"H$_"}
}
$rowind = ,1 * $headers.count
$tr.where({$_.firstchild().tagname -eq 'td'})|%{
$row = $_.getelementsbytagname("td") |? innertext -ne $null| select innertext,rowspan,colspan
try {
$str = [ordered]@{}
$k=0
foreach ($item in $row){
if ($rowind[$k] -gt 1){
while ($rowind[$k] -gt 1){
$str[$headers[$k]] = $null
$rowind[$k] -= 1
$k++
}
}
if (($colspan = $item.colspan) -gt 1) {
$str[$headers[$k]] = if($item.innertext){
$item.innertext.trim()
} else {$null}
if ($item.rowspan -gt 1){$rowind[$k] = $item.rowspan}
$k++
while ($colspan -gt 1){
$str[$headers[$k]] = $null
$colspan -=1
if ($rowind[$k] -gt 1){$rowind[$k]-=1}
$k++
}
} else {
$str[$headers[$k]] = if($item.innertext){
$item.innertext.trim()
} else {$null}
if ($item.rowspan -gt 1){$rowind[$k] = $item.rowspan}
$k++
}
}
[pscustomobject]$str
} catch {
write-host Разметка заголовков не соответствует размерам строк -for red
write-host $_ -for cyan
}
}
}
[pscustomobject]@{
'IP' = $_
'MAC-адрес' = $tbl[([array]::indexof($tbl.h1,'MAC-адрес'))].h2
'Номер телефона' = if ([array]::indexof($tbl.h1,'Номер телефона') -ne -1){
$tbl[([array]::indexof($tbl.h1,'Номер телефона'))].h2
} else {
$tbl[([array]::indexof($tbl.h1,'Номер телефона 1'))].h2
}
'Серийный номер' = $tbl[([array]::indexof($tbl.h1,'Серийный номер'))].h2
'Номер модели' = $tbl[([array]::indexof($tbl.h1,'Номер модели'))].h2
}
} |export-csv $outfile -notype -enc utf8 -d ';'
- здесь подразумевается номер таблицы 1 и таблица с данными должна быть из двух колонок (если будет больше, то скрипт придется корректировать)
Griboed0ff
18-04-2020, 08:42
вот, прикрутил перебор адресов, стыренный у DJ Mogarych
ну и подкорректировал немного скрипт, плюс вывод в CSV »
Вот это монстрище получилось!
Только дублирует информацию и почему только один вид айпишек.
Только дублирует информацию»
судя по характеру ошибок, там есть отсутствующие в сети хосты... надо их сначала пропинговать, перед разбором массива, тогда не будет ошибок и дубликатов...
В общем, заменить эту строку:
$ips = 130..190 |% {[string]$((Get-Netipaddress |? ipaddress -match "^10\.").ipaddress -replace "\d+$") + $_}
этой:
$ips = 130..190 |% {[string]$((Get-Netipaddress |
? ipaddress -match "^10\.").ipaddress -replace "\d+$") + $_}|
?{test-connection $_ -count 1 -q}
Время обработки, естественно увеличится...
и почему только один вид айпишек. »
Один - потому, что Get-Netipaddress... тут будут только IP из интерфейсов текущего компьютера.
Чтобы получить все сети, придется писать сканер сети (что нежелательно), либо составить заранее список сетей...
Примерно так:
$net = '10.83.3.', '10.80.5.', '10.82.0.'
- в общем, перечислить все необходимые, а потом:
переделать строку в такую:
$ips = $net|%{$ip = $_;130..190|%{$ip + $_}}|?{test-connection $_ -count 1 -q}
Griboed0ff
18-04-2020, 10:49
IP MAC-адрес Номер телефона Серийный номер Номер модели
10.83.3.130 ??? ??? ??? ???
10.83.3.131 ??? ??? ??? ???
10.83.3.132 ??? ??? ??? ???
10.83.3.133 ??? ??? ??? ???
10.83.3.134 ??? ??? ??? ???
10.83.3.135 ??? ??? ??? ???
10.83.3.136 442B031A8F7F 60314 PXN16090HOX CP-6921
10.83.3.137 442B031A8F7F 60314 PXN16090HOX CP-6921
10.83.3.138 442B031A7868 60319 PXN16090A7Q CP-6921
10.83.3.139 442B031A7868 60319 PXN16090A7Q CP-6921
10.83.3.140 442B031A7868 60319 PXN16090A7Q CP-6921
10.83.3.141 442B031A7868 60319 PXN16090A7Q CP-6921
10.83.3.142 442B031A7868 60319 PXN16090A7Q CP-6921
10.83.3.143 442B031A7868 60319 PXN16090A7Q CP-6921
10.83.3.144 442B031A7868 60319 PXN16090A7Q CP-6921
10.83.3.145 442B031A7868 60319 PXN16090A7Q CP-6921
10.83.3.146 442B031A7868 60319 PXN16090A7Q CP-6921
10.83.3.147 442B031A7868 60319 PXN16090A7Q CP-6921
10.83.3.148 442B031A7868 60319 PXN16090A7Q CP-6921
10.83.3.149 442B031A7868 60319 PXN16090A7Q CP-6921
10.83.3.150 ??? ??? ??? ???
10.83.3.151 ??? ??? ??? ???
10.83.3.152 442B031A8F85 60136 PXN16090HP3 CP-6921
10.83.3.153 442B031A947B 60565 PXN16090FUP CP-6921
10.83.3.154 442B031A947B 60565 PXN16090FUP CP-6921
10.83.3.155 ??? ??? ??? ???
10.83.3.156 A44C1147B379 60397 PXN161704LE CP-6921
10.83.3.157 A44C1147B379 60397 PXN161704LE CP-6921
10.83.3.158 A44C1147B379 60397 PXN161704LE CP-6921
10.83.3.159 A44C1147B379 60397 PXN161704LE CP-6921
10.83.3.160 A44C1147B379 60397 PXN161704LE CP-6921
10.83.3.161 442B031A9AF3 60504 PXN16090F3D CP-6921
10.83.3.162 442B031A9AF3 60504 PXN16090F3D CP-6921
нет тут другое он записал на каждую найденную айпишку одни и те же данные. Так было уже Аватара для DJ Mogarych
fascinating rhythm
Moderator
Сообщения: 5044
Благодарности: 900
Конфигурация
Профиль | Сайт | Отправить PM | Цитировать | Сообщить модератору
Вставьте после $report += $obj
Код: Выделить весь код
C »
Вставьте после $report += $obj
Код: Выделить весь код
Clear-Variable html,obj »
Айпишки разных видов есть в этой подсети точно и в другую подсеть не надо лазить.
По идее решение (http://forum.oszone.net/post-2917511-33.html) устроило и работает как надо. Как я понял в вашем парсере проще настроить по таблицам и колонкам. Если доделаем то в теории я смогу потом его переделать под другую ситуацию или это решение поможет кому-то в похожей ситуации.
нет тут другое он записал на каждую найденную айпишку одни и те же данные. Так было уже»
Что значит другое?
Вы проверили наличие хостов в сети?
В моем коде, реализация иная, т.е. это не то же самое... заполняется теми же данными только из-за отсутствия реальных IP в сети, т.е. цикл заполнения происходит, но IP отсутствует, данные не считываются и строка заполняется предыдущими...
на каждую найденную айпишку одни и те же данные.»
Здесь, IP не найдены, а сформированы в массив из другого массива 130..190
Сделайте так, как я выше написал... т.е., как минимум, строка должна быть такой:
$ips = 130..190 |% {[string]$((Get-Netipaddress|? ipaddress -match "^10\.").ipaddress -replace "\d+$") + $_}|?{test-connection $_ -count 1 -q}
Айпишки разных видов есть в этой подсети точно и в другую подсеть не надо лазить. »
Посмотрите, что есть у Вас здесь:
(Get-Netipaddress |? ipaddress -match "^10\.").ipaddress
- покажите результат.
Как я понял в вашем парсере проще настроить по таблицам и колонкам. »
Немного проще, но прямая зависимость от dom-структуры, в частности элементов TABLE, всё же, есть...
Добавлено:
Сделайте так, как я выше написал... т.е., как минимум, строка должна быть такой: »
А вообще, по логике, если эта строка:
(Get-Netipaddress |? ipaddress -match "^10\.").ipaddress
- выдает не единственный адрес, то правильнее было бы так записать:
[array]$arr = $((Get-Netipaddress |? ipaddress -match "^10\.").ipaddress -replace "\d+$")
$ips = 130..190 |%{$n=$_;$arr|%{"$_"+$n}}|sort|?{test-connection $_ -count 1 -q}
Griboed0ff
19-04-2020, 09:15
выполнил ваши рекомендации, похоже, что проблема в том, что парсер настроен на один тип страничек, а у двух разных моделей данные находятся в разных таблицах. Результат выполнения вашего скрипта и DJ Mogarych.
похоже, что проблема в том, что парсер настроен на один тип страничек, а у двух разных моделей данные находятся в разных таблицах. »
Нет, таблицы он определяет правильно... по крайней мере в тех двух файлах, что Вы приводили выше...
Здесь, проблема с кодировкой у командлета invoke-restmethod, т.е. это по алгоритму, то же самое, что и invoke-webrequest, и в том, и в другом используется движок IE... что там у него внутри происходит и как именно выбирается кодировка - известно только разрабам.
Попробуйте исключить перекодировку в этой строке:
$html.ihtmldocument2_write($(irm $_|convert $encode 28591))
или использовать другие типы в параметре $encode
Доступные кодировки:
[text.encoding]::getencodings()
использовать можно, как и CodePage, так и Name
В крайнем случае, можно с помощью invoke-webrequest скачивать файл, создавать его в виде промежуточного и потом использовать в разборе... так кодировка ломаться не должна.
Griboed0ff
19-04-2020, 11:26
ага вот она где ошибка: IP MAC-адрес Номер телефона Серийный номер Номер модели
10.83.3.136 ÐÐµÑ ÐÐµÑ ÐÐµÑ ÐеÑ
10.83.3.138 ÐÐµÑ ÐÐµÑ ÐÐµÑ ÐеÑ
10.83.3.150 00778DF9AE1C 60013 WZP230900DN CP-7821
10.83.3.152 ÐÐµÑ ÐÐµÑ ÐÐµÑ ÐеÑ
10.83.3.153 ÐÐµÑ ÐÐµÑ ÐÐµÑ ÐеÑ
10.83.3.155 6CFA8903D741 60103 WZP18210A38 CP-7821
10.83.3.156 ÐÐµÑ ÐÐµÑ ÐÐµÑ ÐеÑ
10.83.3.161 ÐÐµÑ ÐÐµÑ ÐÐµÑ ÐеÑ
10.83.3.163 00778DF9B414 60135 WZP230901QL CP-7821
10.83.3.165 00778DF9B416 60394 WZP230901QN CP-7821
10.83.3.166 6CFA8903E9B2 60506 WZP18210DT9 CP-7821
10.83.3.167 00778DF8C919 60146 WZP23070DGM CP-7821
10.83.3.168 00778DF8C936 60355 WZP23070DHG CP-7821
10.83.3.171 00778DF9B413 60163 WZP230901QK CP-7821
10.83.3.172 00778DF8C948 60116 WZP23070DJ0 CP-7821
10.83.3.174 00778DF8C95A 60390 WZP23070DJJ CP-7821
10.83.3.175 00778DF9B400 60158 WZP230901Q0 CP-7821
теперь он понимает другие айпшки, но перестает первые понимать
мб запускать парсер с кодировкой записывать удачное, а вторым циклом без кодировки, так же записывать только удачные?
мб запускать парсер с кодировкой записывать удачное, а вторым циклом без кодировки, так же записывать только удачные? »
Можно и так, конечно, но с точки зрения программирования, это уже не автоматизация :)
Выполните:
iwr '10.83.3.136' -out '10.83.3.136.html'
iwr '10.83.3.150' -out '10.83.3.150.html'
Заверните в архив оба файла и приложите сюда, либо в личку... попробуем что-нибудь придумать...
Griboed0ff
19-04-2020, 12:51
вот странички.
вот странички. »
Хмм, страницы в одинаковой кодировке... выложил на сайт и обе страницы считываются одинаково. Видимо, есть зависимость в общении командлета и конкретного хоста...
Ну, да ладно. Должно помочь вот это:
param (
#[parameter(Mandatory=$true)]
$encode = 65001,
[string]$outfile = 'table.csv',
[int]$number = 1
)
function convert ($from, $to){
begin{
$fenc = [text.encoding]::getencoding($from)
$tenc = [text.encoding]::getencoding($to)
}
process{
$a = $tenc.getbytes($_)
$fenc.getstring($a)
}
}
[net.servicepointmanager]::securityprotocol = 'ssl3,tls,tls11,tls12'
[array]$arr = $((Get-Netipaddress |? ipaddress -match "^10\.").ipaddress -replace "\d+$")
$ips = 130..190 |%{$n=$_;$arr|%{"$_"+$n}}|sort|?{test-connection $_ -count 1 -q}
$ips|%{
$html = new-object -com "HTMLFile"
$html.ihtmldocument2_write(($h = irm $_))
if ($h -match [char]208){
$html = new-object -com "HTMLFile"
$html.ihtmldocument2_write($(irm $_|convert $encode 28591))
}
$tables = $html.getelementsbytagname("table")
$tbl = ($tables|?{($_.getelementsbytagname('table')|%{$_}).count -eq 0})[$number]|%{
$headers = @();
$tr = $_|%{$_.getelementsbytagname("tr")}
if($headers = $tr|?{$_.firstchild().tagname -eq 'th'}|
%{$_.getelementsbytagname("th")}|select -exp innertext){
$headers = $headers.trim()
} else {
$headers = 1..([linq.parallelenumerable]::max(
[linq.parallelenumerable]::asparallel($tr.lastchild().cellindex)
)+1)|%{"H$_"}
}
$rowind = ,1 * $headers.count
$tr.where({$_.firstchild().tagname -eq 'td'})|%{
$row = $_.getelementsbytagname("td") |? innertext -ne $null| select innertext,rowspan,colspan
try {
$str = [ordered]@{}
$k=0
foreach ($item in $row){
if ($rowind[$k] -gt 1){
while ($rowind[$k] -gt 1){
$str[$headers[$k]] = $null
$rowind[$k] -= 1
$k++
}
}
if (($colspan = $item.colspan) -gt 1) {
$str[$headers[$k]] = if($item.innertext){
$item.innertext.trim()
} else {$null}
if ($item.rowspan -gt 1){$rowind[$k] = $item.rowspan}
$k++
while ($colspan -gt 1){
$str[$headers[$k]] = $null
$colspan -=1
if ($rowind[$k] -gt 1){$rowind[$k]-=1}
$k++
}
} else {
$str[$headers[$k]] = if($item.innertext){
$item.innertext.trim()
} else {$null}
if ($item.rowspan -gt 1){$rowind[$k] = $item.rowspan}
$k++
}
}
[pscustomobject]$str
} catch {
write-host Разметка заголовков не соответствует размерам строк -for red
write-host $_ -for cyan
}
}
}
[pscustomobject]@{
'IP' = $_
'MAC-адрес' = $tbl[([array]::indexof($tbl.h1,'MAC-адрес'))].h2
'Номер телефона' = if ([array]::indexof($tbl.h1,'Номер телефона') -ne -1){
$tbl[([array]::indexof($tbl.h1,'Номер телефона'))].h2
} else {
$tbl[([array]::indexof($tbl.h1,'Номер телефона 1'))].h2
}
'Серийный номер' = $tbl[([array]::indexof($tbl.h1,'Серийный номер'))].h2
'Номер модели' = $tbl[([array]::indexof($tbl.h1,'Номер модели'))].h2
}
} |export-csv $outfile -notype -enc utf8 -d ';'
Griboed0ff
19-04-2020, 14:08
Ну, да ладно. Должно помочь вот это: » это помогло. Работает ответы со скриптом DJ Mogarych совпадают, проверил оба скрипта соответствуют действительности.
теперь в этой теме два решения. Осталось понять в чем различия, плюсы минусы.
Осталось понять в чем различия, плюсы минусы. »
Больше интересен вопрос, почему нет проблемы с кодировкой в этом решении (http://forum.oszone.net/post-2917511.html#post2917511), а в моем присутствует... по сути, получение данных однотипное...
Надо бы проверить варианты:
$html1 = (curl "https://10.83.3.136/CGI/Java/Serviceability?adapter=device.statistics.device").rawcontent
$html2 = irm "https://10.83.3.136/CGI/Java/Serviceability?adapter=device.statistics.device"
$html1
$html2
- и сравнить кодировку...
А плюсы и минусы:
1. DJ Mogarych
2. YuS_2,
1.
Плюсы:
Работает быстрее.
Минусы:
Привязка к номеру модели.
Привязан к внутренней структуре таблицы (если, например, добавится столбец с пустыми значениями, то код придется корректировать)
При наличии атрибутов rowspan или colspan, значения таблицы могут "поплыть", т.е. выходной файл не будет соответствовать исходной таблице.
2.
Плюсы:
Разбирает таблицу даже при наличии colspan и rowspan
Нет зависимости от пустых столбцов.
Минусы:
Работает медленнее
Есть привязка к структуре таблицы (две колонки с данными), если количество колонок с данными изменяется, потребуется корректировка.
Griboed0ff
19-04-2020, 15:13
Круто, на самом деле хочу попробовать ваш код на мфу с мордой, буду дергать версию прошивки модель ревизия. думаю все будет примерно так же.
Надо бы проверить варианты: »
PS C:\WINDOWS\system32> $html1 = (curl "http://10.83.3.136").rawcontent
$html2 = irm "http://10.83.3.136"
$html1
$html2
HTTP/1.1 200 OK
Connection: close
Content-Type: text/html
Server: WindRiver-WebServer/4.4
WWW-Authenticate: Basic realm="SEP442B031A8F7F"
<HTML>
<HEAD><META http-equiv="Content-Type" content="text/html; charset=UTF-8"/><TITLE>Cisco Systems, Inc.</TITLE>
</HEAD>
<BODY bgcolor="#FFFFFF" link="#FFFFFF" vlink="#FFFFFF" alink="#FFFFFF" text="#003031"><TABLE BORDER="1" WIDTH="100%" HEIGHT="100%" CELLSPACING="0" CELLPADDING="0" bordercolor="#003031"><TR>
<td WIDTH="200" HEIGHT="100" ALIGN=center><A HREF="http://www.cisco.com"><IMG SRC="cisco_Logo.gif" width="130" height="95"></A></TD><td HEIGHT="50" bgcolor="#003031"><p ALIGN=center><B><font color="#FFFFFF" size="6
">ÐнÑоÑмаÑÐ¸Ñ Ð¾Ð± ÑÑÑÑойÑÑве</FONT></B>
<p ALIGN=center><B><font color="#FFFFFF" size="4">IP-ÑелеÑон Cisco CP-6921 (</FONT></B> <font color="#FFFFFF"><strong>SEP442b031a8f7f</strong> </font><B><font color="#FFFFFF" size="4">)</FONT></FONT></B></TD
>
</TR>
<TR><td WIDTH="200" ALIGN=center VALIGN=top bgcolor="#003031"><TABLE BORDER="0" CELLSPACING="10" CELLPADDING="0">
<TR>
<TD><a href="/">ÐнÑоÑмаÑÐ¸Ñ Ð¾Ð± ÑÑÑÑойÑÑве</a></TD>
</TR>
<TR>
<TD><a href="NetworkConfiguration">ÐаÑÑÑойка ÑеÑи</a></TD>
</TR>
<!--<TR>
<TD><a href="device.html">ÐаÑамеÑÑÑ ÑÑÑÑойÑÑва</a></TD>
</TR>
<TR>
<TD><a href="security.html">ÐаÑÑÑойкa безопаÑноÑÑи</a></TD>
</TR>
<TR>
<TD><a href="status.html">СоÑÑоÑние</a></TD>
</TR>-->
<TR>
<TD><B><font color='#FFFFFF'>СÑаÑиÑÑика ÑеÑи</FONT></B></TD>
</TR>
<TR>
<TD> <a href="EthernetInformation">ÐнÑоÑмаÑÐ¸Ñ Ð¾ Ethernet</A></TD>
</TR>
<TR>
<TD> <a href="PortInformation?1">СеÑÑ</A></TD>
</TR>
<TR>
<TD><B><font color='#FFFFFF'>ÐÑÑÐ½Ð°Ð»Ñ ÑÑÑÑ-ва</FONT></B></TD>
</TR>
<TR>
<TD> <a href="console.html">ÐÑоÑоколÑ</A></TD>
</TR>
<TR>
<TD> <a href="coredump.html">ÐÐ°Ð¼Ð¿Ñ ÑдÑа</A></TD>
</TR>
<TR>
<TD> <a href="status.html">СообÑÐµÐ½Ð¸Ñ Ð¾ ÑоÑÑоÑнии</A></TD>
</TR>
<TR>
<TD> <a href="debug.html"> ÐоказаÑÑ Ð¾ÑладкÑ</A></TD>
</TR>
<TR>
<TD><B><font color='#FFFFFF'>ÐоÑÐ¾ÐºÐ¾Ð²Ð°Ñ ÑÑаÑиÑÑика</FONT></B></TD>
</TR>
<TR>
<TD> <a href="StreamingStatistics?1">ÐоÑок 1</A></TD>
</TR>
<TR>
<TD> <a href="StreamingStatistics?2">ÐоÑок 2</A></TD>
</TR>
</TABLE>
</TD>
<td VALIGN=top><DIV ALIGN=center>
<TABLE BORDER="0" CELLSPACING="10" CELLPADDING="0"><TR>
<TD><B>MAC-адÑеÑ</B></TD>
<td width=20></TD><TD><B>442B031A8F7F</B></TD>
</TR>
<TR>
<TD><B>ÐÐ¼Ñ Ñ
оÑÑа</B></TD>
<td width=20></TD><TD><B>SEP442b031a8f7f</B></TD>
</TR>
<TR>
<TD><B>ÐÐ¾Ð¼ÐµÑ ÑелеÑона 1</B></TD>
<TD width=20></TD>
<TD><B>60314</B></TD>
</TR>
<!-- -->
<!-- -->
<!-- -->
<!-- -->
<!-- -->
<!-- -->
<!-- -->
<!-- -->
<!-- -->
<!-- -->
<!-- -->
<TR>
<TD><B> Ðод загÑÑженного пÑиложениÑ</B></TD>
<td width=20></TD><TD><B>SCCP 9.4.1.3.SR3</B></TD>
</TR><TR>
<TD><B> Ðод загÑÑзки ÑиÑÑемÑ</B></TD>
<td width=20></TD><TD><strong>0.0.0.14</strong></TD>
</TR><TR>
<TD><B> Ð*ÐµÐ²Ð¸Ð·Ð¸Ñ Ð°Ð¿Ð¿Ð°Ñ. oбеÑп.</B></TD>
<td width=20></TD><TD><strong>5</strong></TD>
</TR>
<TR>
<TD><B> СеÑийнÑй номеÑ</B></TD>
<td width=20></TD><TD><strong>PXN16090HOX</strong></TD>
</TR>
<TR>
<TD><B> ÐÐ¾Ð¼ÐµÑ Ð¼Ð¾Ð´ÐµÐ»Ð¸</B></TD>
<td width=20></TD><TD><strong>CP-6921</strong></TD>
</TR>
<TR>
<TD><B> СообÑение в ÑоÑÑ. ожиданиÑ</B></TD>
<td width=20></TD><TD><strong>ÐеÑ</strong></TD>
</TR>
<TR>
<TD><B>UDI</B></TD>
<td width=20></TD>
<TD><B>ТелеÑон</B></TD>
</TR>
<TR><TD> </TD>
<td width=20></TD>
<TD><strong>IP-ÑелеÑон Cisco CP-6921</strong></TD>
</TR>
<TR><TD> </TD>
<td width=20></TD>
<TD><strong>CP-6921</strong></TD>
</TR>
<TR>
<TD> </TD>
<TD width=20></TD>
<TD><strong>PXN16090HOX</strong></TD>
</TR>
<TR>
<TD> </TD>
<TD width=20></TD>
<TD><strong>74-6516-02 H0Rev= V02</strong></TD>
</TR>
<TR>
<TD><B>ÐÑемÑ</B></TD>
<td width=20></TD>
<TD><strong>17:14</strong></TD>
</TR>
<TR>
<TD><B>ЧаÑовой поÑÑ</B></TD>
<td width=20></TD>
<TD><strong>Etc/GMT-5</strong></TD>
</TR>
<TR>
<TD><B>ÐаÑа</B></TD>
<td width=20></TD>
<TD><strong>19.04.20</strong></TD>
</TR>
<TR>
<TD><B>ÐклÑÑен Ñежим FIPS</B></TD>
<td width=20></TD>
<TD><strong>
ÐеÑ
</strong></TD>
</TR>
</TABLE>
</DIV></TD></TR></TABLE></BODY></HTML>
<HTML>
<HEAD><META http-equiv="Content-Type" content="text/html; charset=UTF-8"/><TITLE>Cisco Systems, Inc.</TITLE>
</HEAD>
<BODY bgcolor="#FFFFFF" link="#FFFFFF" vlink="#FFFFFF" alink="#FFFFFF" text="#003031"><TABLE BORDER="1" WIDTH="100%" HEIGHT="100%" CELLSPACING="0" CELLPADDING="0" bordercolor="#003031"><TR>
<td WIDTH="200" HEIGHT="100" ALIGN=center><A HREF="http://www.cisco.com"><IMG SRC="cisco_Logo.gif" width="130" height="95"></A></TD><td HEIGHT="50" bgcolor="#003031"><p ALIGN=center><B><font color="#FFFFFF" size="6
">ÐнÑоÑмаÑÐ¸Ñ Ð¾Ð± ÑÑÑÑойÑÑве</FONT></B>
<p ALIGN=center><B><font color="#FFFFFF" size="4">IP-ÑелеÑон Cisco CP-6921 (</FONT></B> <font color="#FFFFFF"><strong>SEP442b031a8f7f</strong> </font><B><font color="#FFFFFF" size="4">)</FONT></FONT></B></TD
>
</TR>
<TR><td WIDTH="200" ALIGN=center VALIGN=top bgcolor="#003031"><TABLE BORDER="0" CELLSPACING="10" CELLPADDING="0">
<TR>
<TD><a href="/">ÐнÑоÑмаÑÐ¸Ñ Ð¾Ð± ÑÑÑÑойÑÑве</a></TD>
</TR>
<TR>
<TD><a href="NetworkConfiguration">ÐаÑÑÑойка ÑеÑи</a></TD>
</TR>
<!--<TR>
<TD><a href="device.html">ÐаÑамеÑÑÑ ÑÑÑÑойÑÑва</a></TD>
</TR>
<TR>
<TD><a href="security.html">ÐаÑÑÑойкa безопаÑноÑÑи</a></TD>
</TR>
<TR>
<TD><a href="status.html">СоÑÑоÑние</a></TD>
</TR>-->
<TR>
<TD><B><font color='#FFFFFF'>СÑаÑиÑÑика ÑеÑи</FONT></B></TD>
</TR>
<TR>
<TD> <a href="EthernetInformation">ÐнÑоÑмаÑÐ¸Ñ Ð¾ Ethernet</A></TD>
</TR>
<TR>
<TD> <a href="PortInformation?1">СеÑÑ</A></TD>
</TR>
<TR>
<TD><B><font color='#FFFFFF'>ÐÑÑÐ½Ð°Ð»Ñ ÑÑÑÑ-ва</FONT></B></TD>
</TR>
<TR>
<TD> <a href="console.html">ÐÑоÑоколÑ</A></TD>
</TR>
<TR>
<TD> <a href="coredump.html">ÐÐ°Ð¼Ð¿Ñ ÑдÑа</A></TD>
</TR>
<TR>
<TD> <a href="status.html">СообÑÐµÐ½Ð¸Ñ Ð¾ ÑоÑÑоÑнии</A></TD>
</TR>
<TR>
<TD> <a href="debug.html"> ÐоказаÑÑ Ð¾ÑладкÑ</A></TD>
</TR>
<TR>
<TD><B><font color='#FFFFFF'>ÐоÑÐ¾ÐºÐ¾Ð²Ð°Ñ ÑÑаÑиÑÑика</FONT></B></TD>
</TR>
<TR>
<TD> <a href="StreamingStatistics?1">ÐоÑок 1</A></TD>
</TR>
<TR>
<TD> <a href="StreamingStatistics?2">ÐоÑок 2</A></TD>
</TR>
</TABLE>
</TD>
<td VALIGN=top><DIV ALIGN=center>
<TABLE BORDER="0" CELLSPACING="10" CELLPADDING="0"><TR>
<TD><B>MAC-адÑеÑ</B></TD>
<td width=20></TD><TD><B>442B031A8F7F</B></TD>
</TR>
<TR>
<TD><B>ÐÐ¼Ñ Ñ
оÑÑа</B></TD>
<td width=20></TD><TD><B>SEP442b031a8f7f</B></TD>
</TR>
<TR>
<TD><B>ÐÐ¾Ð¼ÐµÑ ÑелеÑона 1</B></TD>
<TD width=20></TD>
<TD><B>60314</B></TD>
</TR>
<!-- -->
<!-- -->
<!-- -->
<!-- -->
<!-- -->
<!-- -->
<!-- -->
<!-- -->
<!-- -->
<!-- -->
<!-- -->
<TR>
<TD><B> Ðод загÑÑженного пÑиложениÑ</B></TD>
<td width=20></TD><TD><B>SCCP 9.4.1.3.SR3</B></TD>
</TR><TR>
<TD><B> Ðод загÑÑзки ÑиÑÑемÑ</B></TD>
<td width=20></TD><TD><strong>0.0.0.14</strong></TD>
</TR><TR>
<TD><B> Ð*ÐµÐ²Ð¸Ð·Ð¸Ñ Ð°Ð¿Ð¿Ð°Ñ. oбеÑп.</B></TD>
<td width=20></TD><TD><strong>5</strong></TD>
</TR>
<TR>
<TD><B> СеÑийнÑй номеÑ</B></TD>
<td width=20></TD><TD><strong>PXN16090HOX</strong></TD>
</TR>
<TR>
<TD><B> ÐÐ¾Ð¼ÐµÑ Ð¼Ð¾Ð´ÐµÐ»Ð¸</B></TD>
<td width=20></TD><TD><strong>CP-6921</strong></TD>
</TR>
<TR>
<TD><B> СообÑение в ÑоÑÑ. ожиданиÑ</B></TD>
<td width=20></TD><TD><strong>ÐеÑ</strong></TD>
</TR>
<TR>
<TD><B>UDI</B></TD>
<td width=20></TD>
<TD><B>ТелеÑон</B></TD>
</TR>
<TR><TD> </TD>
<td width=20></TD>
<TD><strong>IP-ÑелеÑон Cisco CP-6921</strong></TD>
</TR>
<TR><TD> </TD>
<td width=20></TD>
<TD><strong>CP-6921</strong></TD>
</TR>
<TR>
<TD> </TD>
<TD width=20></TD>
<TD><strong>PXN16090HOX</strong></TD>
</TR>
<TR>
<TD> </TD>
<TD width=20></TD>
<TD><strong>74-6516-02 H0Rev= V02</strong></TD>
</TR>
<TR>
<TD><B>ÐÑемÑ</B></TD>
<td width=20></TD>
<TD><strong>17:14</strong></TD>
</TR>
<TR>
<TD><B>ЧаÑовой поÑÑ</B></TD>
<td width=20></TD>
<TD><strong>Etc/GMT-5</strong></TD>
</TR>
<TR>
<TD><B>ÐаÑа</B></TD>
<td width=20></TD>
<TD><strong>19.04.20</strong></TD>
</TR>
<TR>
<TD><B>ÐклÑÑен Ñежим FIPS</B></TD>
<td width=20></TD>
<TD><strong>
ÐеÑ
</strong></TD>
</TR>
</TABLE>
</DIV></TD></TR></TABLE></BODY></HTML>
PS C:\WINDOWS\system32>
результат »
Понятно. Получается так:
В том скрипте не учитывается кодировка, там просто данные разрезаются и по индексу массива выдергиваются... а сами данные - не кириллица, поэтому кодировка неважна.
В моем скрипте формируется массив кастомных объектов при разборе таблицы, а потом по содержимому элементов массива получаем индекс нужных данных и формируем новый массив. Поэтому кодировка важна.
Griboed0ff
19-04-2020, 18:48
Я думаю вернусь когда буду читать морды мфу
Griboed0ff
20-04-2020, 11:00
Ну, да ладно. Должно помочь вот это: »PS C:\Windows\system32> D:\1.ps1
Сбой вызова метода из-за отсутствия в [System.__ComObject] метода с именем "ihtmldocument2_write".
D:\1.ps1:24 знак:30
+ $html.ihtmldocument2_write(($h = irm $_))
+ ~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (ihtmldocument2_write:String) [], RuntimeException
+ FullyQualifiedErrorId : MethodNotFound
Сбой вызова метода из-за отсутствия в [System.__ComObject] метода с именем "ihtmldocument2_write".
D:\1.ps1:27 знак:32
+ $html.ihtmldocument2_write($(irm $_|convert $encode 28591))
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (ihtmldocument2_write:String) [], RuntimeException
+ FullyQualifiedErrorId : MethodNotFound
Не удается индексировать в массив NULL.
D:\1.ps1:30 знак:2
+ $tbl = ($tables|?{($_.getelementsbytagname('table')|%{$_}).count ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : NullArray
Исключение при вызове "IndexOf" с "2" аргументами: "Значение не может быть неопределенным.
Имя параметра: array"
D:\1.ps1:82 знак:2
+ [pscustomobject]@{
+ ~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : ArgumentNullException
Сбой вызова метода из-за отсутствия в [System.__ComObject] метода с именем "ihtmldocument2_write".
D:\1.ps1:24 знак:30
+ $html.ihtmldocument2_write(($h = irm $_))
+ ~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (ihtmldocument2_write:String) [], RuntimeException
+ FullyQualifiedErrorId : MethodNotFound
Сбой вызова метода из-за отсутствия в [System.__ComObject] метода с именем "ihtmldocument2_write".
D:\1.ps1:27 знак:32
+ $html.ihtmldocument2_write($(irm $_|convert $encode 28591))
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (ihtmldocument2_write:String) [], RuntimeException
+ FullyQualifiedErrorId : MethodNotFound
Не удается индексировать в массив NULL.
D:\1.ps1:30 знак:2
+ $tbl = ($tables|?{($_.getelementsbytagname('table')|%{$_}).count ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : NullArray
Исключение при вызове "IndexOf" с "2" аргументами: "Значение не может быть неопределенным.
Имя параметра: array"
D:\1.ps1:82 знак:2
+ [pscustomobject]@{
+ ~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : ArgumentNullException
опробовал на вроде таких же страничках и посыпались ошибки. Странички приложил.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.