Автор Тема: Простой парсер HTML кода HTMLFILE  (Прочитано 34171 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн alex33 [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 1356
  • Репутация: 170
  • Пол: Мужской
    • alekssamos ВКонтакте
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: Простой парсер HTML кода HTMLFILE
« Ответ #60, Отправлен: Март 04, 2016, 22:08:39 »
CreatoR Спасибо, но так выдаёт ошибку
"C:\Program Files\AutoIt3\Include\IE.au3" (272) : ==> The requested action with this object has failed.:
$oObject.navigate($sUrl)
$oObject^ ERROR
Re: Ошибка: The requested action with this object has failed
А вообще, эта ошибка возникает у многих, в том числе и у меня. Выход я вижу только один, поставить AutoIt версии 3.3.12.0 или ниже (Previous Versions).

Русское сообщество AutoIt

Re: Простой парсер HTML кода HTMLFILE
« Ответ #60 Отправлен: Март 04, 2016, 22:08:39 »

Оффлайн araneon [?]

  • Новичок
  • *
  • Сообщений: 59
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Простой парсер HTML кода HTMLFILE
« Ответ #61, Отправлен: Март 04, 2016, 22:49:14 »
alex33 Спасибо, попробовал на 3.3.8.1 выдаёт
E:\Scripts\AutoIt3_v3.3.8.1\Include\IE.au3 (314) : ==> The requested action with this object has failed.:
$o_object.navigate($s_Url)
$o_object.navigate($s_Url)^ ERROR
Нет ничего сложнее того, что выглядит и кажется простым

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7800
  • Репутация: 2279
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
Re: Простой парсер HTML кода HTMLFILE
« Ответ #62, Отправлен: Апрель 22, 2017, 14:08:39 »
Пытаюсь удалить элемент с этой штукой:

Код: AutoIt [Выделить]
$sHtml = BinaryToString(InetRead('http://autoit-script.ru'))
$sHtml = __NodeRemove($sHtml, 'div.share42init')
ConsoleWrite(StringInStr($sHtml, '<div class=share42init') & @CRLF)

Func __NodeRemove($sHtml, $sSelector, $bChilds = True)
    Local Static $oHtml = ObjCreate('htmlfile')
   
    $oHtml.body.innerhtml = $sHTML
   
    Local $oSelect = $oHtml.querySelector($sSelector)
   
    If IsObj($oSelect) Then
        $oSelect.RemoveNode($bChilds)
    EndIf
   
    $sRet = $oHtml.body.innerhtml
   
    Return $sRet
EndFunc


но тут querySelector не срабатывает, в чём может быть причина? :think:


Правила, Поиск, Супер тема


AutoIt is simple, subtle, elegant.


«Не оказываю тех. поддержку через ПМ/ICQ, и по электронной почте - для этого есть форум. (C)»
«Законы Мэрфи неоспоримы!»


Мои работы

Оффлайн Garrett [?]

  • Глобальный модератор
  • *
  • Сообщений: 3735
  • Репутация: 943
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: Простой парсер HTML кода HTMLFILE
« Ответ #63, Отправлен: Апрель 22, 2017, 14:56:33 »
CreatoR  [?]
Цитировать
в чём может быть причина
Версия браузера, полностью поддерживающая метод.
MethodChromeInternet Explorer / EdgeFirefoxSafariOpera
querySelector()4.08.03.53.210.0

Скорблю и помню.




Русское сообщество AutoIt

Re: Простой парсер HTML кода HTMLFILE
« Ответ #63 Отправлен: Апрель 22, 2017, 14:56:33 »

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7800
  • Репутация: 2279
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
Re: Простой парсер HTML кода HTMLFILE
« Ответ #64, Отправлен: Апрель 22, 2017, 15:12:36 »
Garrett  [?]
Цитировать
Версия браузера, полностью поддерживающая метод.
У меня IE 11.
Я так понял объект HtmlFile работает с установленным IE?

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7800
  • Репутация: 2279
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
Re: Простой парсер HTML кода HTMLFILE
« Ответ #65, Отправлен: Апрель 22, 2017, 15:27:01 »
Так же работает:

Код: AutoIt [Выделить]
Func __RemoveNode($sHtml, $sSelector, $bChilds = True)
    $oIE = _IECreate('', 0, 0, 0, 0)
    _IEBodyWriteHTML($oIE, $sHtml)
   
    Local $oSelect = $oIE.document.querySelector($sSelector)
   
    If IsObj($oSelect) Then
        $oSelect.RemoveNode($bChilds)
    EndIf
   
    Local $sRet = _IEBodyReadHTML($oIE)
   
    _IEQuit($oIE)
   
    Return $sRet
EndFunc


Оффлайн Garrett [?]

  • Глобальный модератор
  • *
  • Сообщений: 3735
  • Репутация: 943
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: Простой парсер HTML кода HTMLFILE
« Ответ #66, Отправлен: Апрель 22, 2017, 15:31:02 »
CreatoR  [?]
Цитировать
Я так понял объект HtmlFile работает с установленным IE?
Нет. То есть да, но версия самая младшая. До Win7 была IE6, после IE7. В Win10 не знаю.
Код: AutoIt [Выделить]
$sHtml = BinaryToString(InetRead('http://autoit-script.ru'))
$sHtml = __NodeRemove($sHtml, 'div.share42init')
;~ ConsoleWrite(StringInStr($sHtml, '<div class=share42init') & @CRLF)
ConsoleWrite($sHtml & @CRLF)

Func __NodeRemove($sHtml, $sSelector, $bChilds = True)
   Local Static $oHtml = ObjCreate('htmlfile')

   $oHtml.body.innerhtml = $sHTML
   $sUserAgent = $oHtml.parentWindow.navigator.userAgent

   Return $sUserAgent

   Local $oSelect = $oHtml.querySelector($sSelector)

   If IsObj($oSelect) Then
      $oSelect.RemoveNode($bChilds)
   EndIf

   $sRet = $oHtml.body.innerhtml

   Return $sRet
EndFunc



Добавлено: Апрель 22, 2017, 15:40:45
CreatoR  [?]
Цитировать
Так же работает
Так вы запускаете самую последнюю установленную версию браузера IE.
« Последнее редактирование: Апрель 22, 2017, 15:40:45 от Garrett, Причина: Объединение сообщений »

Оффлайн inververs [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 2093

  • Автор темы
  • Репутация: 452
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: Простой парсер HTML кода HTMLFILE
« Ответ #67, Отправлен: Апрель 22, 2017, 17:14:09 »
Где то в реестре вписывается какой версии движок использовать.

Русское сообщество AutoIt

Re: Простой парсер HTML кода HTMLFILE
« Ответ #67 Отправлен: Апрель 22, 2017, 17:14:09 »

Оффлайн alex33 [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 1356
  • Репутация: 170
  • Пол: Мужской
    • alekssamos ВКонтакте
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: Простой парсер HTML кода HTMLFILE
« Ответ #68, Отправлен: Апрель 22, 2017, 17:35:49 »
В общем, браузер IE работает отдельно от объекта HTMLFILE и версии различаются. Отбирай по одному через перебор, через цикл и удаляй.

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7800
  • Репутация: 2279
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
Re: Простой парсер HTML кода HTMLFILE
« Ответ #69, Отправлен: Апрель 22, 2017, 18:12:35 »
inververs  [?]
Цитировать
Где то в реестре вписывается какой версии движок использовать
Вот если сделать так:

Код: AutoIt [Выделить]
$sHtml = StringReplace($sHtml, '<head>', '<head><meta http-equiv="X-UA-Compatible" content="IE=edge" />')


то показывает в User-Agent IE8, но всё равно не работает...

Ещё одна проблема с HtmlFile, теги и атрибуты возвращаются в большом регистре.

Оффлайн alex33 [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 1356
  • Репутация: 170
  • Пол: Мужской
    • alekssamos ВКонтакте
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: Простой парсер HTML кода HTMLFILE
« Ответ #70, Отправлен: Апрель 22, 2017, 18:25:39 »
Про большой регистр - они, кажется, всегда так возвращаются. Просто каждый вывод пропускай через .toLowerCase / StringLower

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7800
  • Репутация: 2279
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
Re: Простой парсер HTML кода HTMLFILE
« Ответ #71, Отправлен: Апрель 22, 2017, 18:31:43 »
alex33  [?]
Цитировать
каждый вывод пропускай через .toLowerCase / StringLower
Не вариант - внутренний текст не должен менять регистр.

В общем нужен нормальный инструмент для работы с DOM, без использования IE.

Русское сообщество AutoIt

Re: Простой парсер HTML кода HTMLFILE
« Ответ #71 Отправлен: Апрель 22, 2017, 18:31:43 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
0 Ответов
4796 Просмотров
Последний ответ Сентябрь 12, 2010, 11:08:09
от damien2008
4 Ответов
6153 Просмотров
Последний ответ Апрель 23, 2012, 19:14:27
от ggzgamer
5 Ответов
2689 Просмотров
Последний ответ Октябрь 31, 2014, 14:07:45
от denispuh
1 Ответов
2109 Просмотров
Последний ответ Апрель 20, 2013, 21:12:41
от sngr
3 Ответов
1812 Просмотров
Последний ответ Сентябрь 28, 2013, 13:38:52
от bdkitty
0 Ответов
621 Просмотров
Последний ответ Июль 24, 2014, 19:17:23
от e.belykh
8 Ответов
2488 Просмотров
Последний ответ Март 06, 2015, 21:17:45
от Nosfer_x
30 Ответов
13172 Просмотров
Последний ответ Апрель 26, 2015, 11:54:58
от Garrett
0 Ответов
763 Просмотров
Последний ответ Апрель 22, 2015, 17:49:49
от madmasles
1 Ответов
2523 Просмотров
Последний ответ Июнь 22, 2015, 13:17:44
от madmasles