Показать полную графическую версию : [решено] Получить заголовок страницы в Интернете
Привет. Такая задача.
Надо получить заголовок страницы, которая расположена на удалённом сервере.
Т.е., надо получить текст между тэгами <TITLE>.
С помощью каких встроенных функций можно такое сделать?
Вот так примерно:
#include <IE.au3>
Local $oIE, $oLinks, $tags
Local $link = "http://www.example.com/"
_IEErrorNotify(False)
; Открываем IE
If IsObj($oIE) Then
_IEQuit($oIE)
EndIf
$oIE=_IECreate($link,1,0,1)
ConsoleWrite ( $link & @LF)
_IENavigate($oIE, $link, 0) ; тут не ждем пока загрузится
_IELoadWait($oIE, 5000 , 15000) ; а тут ждем максимум 15 сек
If not @error Then
$tags = $oIE.document.GetElementsByTagName("title")
if IsObj($tags) Then
ConsoleWrite ('tags=' & $tags.Length & @LF)
Sleep(200)
For $tag in $tags
$class_value = $tag.className
$innerText_value = _IEPropertyGet($tag, 'innertext')
ConsoleWrite ('innerText_value=' & $innerText_value &@LF)
Next
Else
ConsoleWrite ('tags no obj' & @LF)
EndIf
EndIf
If IsObj($oIE) Then
_IEQuit($oIE)
EndIf
ConsoleWrite ("Exit au3." & @LF)
Чё-то он выдаёт ошибку. В файле IE.au3 344-я строка.
$sTmp = $oWindow.type ; Is .type a valid property?
$sTmp = $oWindow^Error
У меня без ошибок. Пробовал разные ссылки и https тоже.
IE 11 на Windows 10 x32, autoit 3.14
А у меня Хрюша и IE 6.
Ну ладно, спасибо.
на хрюше вроде ie 8 или даже 9 есть )))
Mike909, какой смысл в вечно ложном условии:
If IsObj($oIE) Then
_IEQuit($oIE)
EndIf
?! Какой смысл делать переход на ссылку два раза:
$oIE=_IECreate($link,1,0,1)
…
_IENavigate($oIE, $link, 0)
?
Мой вариант:
#include <IE.au3>
#include <MsgBoxConstants.au3>
AutoItSetOption("MustDeclareVars", 1)
Local $oIE = _IECreate("https://www.google.com", 0, 0)
Local $oDocument = _IEDocGetObj($oIE)
MsgBox($IDOK, "https://www.google.com", $oDocument.title)
_IENavigate($oIE, "http://www.yandex.ru/")
$oDocument = _IEDocGetObj($oIE)
MsgBox($IDOK, "http://www.yandex.ru/", $oDocument.title)
_IEQuit($oIE)
Exit(0)
Iska, спасибо. Ваш скрипт работает. Интересно, а будет ли он работать на любых операционных системах?
Хотя-бы, чтобы начиная с ХР, кончая 10-ой. И чтобы от разрядности не зависел.
Паразит, проверяйте, мне не на чем. Могу сказать одно: работать будет не везде. Например, данный форум и сайт на IE11 без установки режима совместимости дадут ошибку обработки. Соответственно, и скрипт «обломается».
А как выставить такой режим?
Паразит, не интересовался. Видимо получать номер версии IE, сравнивать и добавлять по нужде сайт в списки: Programmatically add a site to Compatibility View list (https://social.technet.microsoft.com/Forums/ie/en-US/3e8092c1-57ef-4439-b9b9-91cebd23c4a7/programmatically-add-a-site-to-compatibility-view-list?forum=ieitprocurrentver).
?! Какой смысл делать переход на ссылку два раза: »
Это остатки другого скрипта, здесь я просто не доглядел, когда урезал. Так то конечно не нужно.
Паразит,
$sURL = 'http://forum.oszone.net/post-2726095.html'
$sTitle = StringRegExpReplace(BinaryToString(InetRead($sURL)), '(?si).*?<title>|</title>.*', '')
;$sTitle = StringRegExp(BinaryToString(InetRead($sURL)), '<title>(.*?)</title>', 3)[0]
MsgBox(0, @ScriptName, $sTitle)
Creat0R, это то, что мне нужно. Просто и со вкусом. Но.
1. Не работает с защищённым соединением (HTTPS).
2. Если страница UTF-8, то выводятся кракозябры.
Я думаю, что второе это ерунда (легко поправимо), а вот с первым - я думаю, что не ерунда.
1. Не работает с защищённым соединением (HTTPS). »
Пример, где не работает. На https://ya.ru/ — у меня сработало.
Я думаю, что второе это ерунда (легко поправимо) »
Это не совсем так. Хорошо, если Вы заранее знаете, в каком виде и в какой кодировке отдаётся содержимое. Но в общем случае, при произвольном взятом url, начинается жёппа.
Iska, точно. Не работает, если не указан протокол.
Так работает:
http://wincmd.ru/
А так нет:
www.wincmd.ru
wincmd.ru
Паразит, протокол желательно указывать. Ведь схема является составной и обязательной частью URI.
$sURL = 'http://wincmd.ru'
$sHtml = BinaryToString(InetRead($sURL))
$aTitle = StringRegExp($sHtml, '<title>(.*?)</title>', 3)
If Not @error Then
$sTitle = (_Encoding_IsUTF8Format($aTitle[0]) ? BinaryToString(StringToBinary($aTitle[0]), 4) : $aTitle[0])
MsgBox(0, @ScriptName, $sTitle)
EndIf
Func _Encoding_IsUTF8Format($sText, $iCheckASCIICode = False)
Local $iAsc, $iExt, $iLen = StringLen($sText), $bLess128 = True
For $i = 1 To $iLen
$iAsc = Asc(StringMid($sText, $i, 1))
If $iCheckASCIICode And $iAsc > 128 Then $bLess128 = False
If Not BitAND($iAsc, 0x80) Then
ContinueLoop
ElseIf Not BitXOR(BitAND($iAsc, 0xE0), 0xC0) Then
$iExt = 1
ElseIf Not (BitXOR(BitAND($iAsc, 0xF0), 0xE0)) Then
$iExt = 2
ElseIf Not BitXOR(BitAND($iAsc, 0xF8), 0xF0) Then
$iExt = 3
Else
Return False
EndIf
If $i + $iExt > $iLen Then Return False
For $j = $i + 1 To $i + $iExt
$iAsc = Asc(StringMid($sText, $j, 1))
If BitXOR(BitAND($iAsc, 0xC0), 0x80) Then Return False
Next
$i += $iExt
Next
If $iCheckASCIICode Then Return($bLess128 = False)
Return True
EndFunc
Creat0R, великолепно, спасибо. Работает так, как надо.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.