Уважаемые знатоки! Подскажите, пожалуйста, как проверить в EXCEL список из 10000 вебссылок на наличие битых, и подсветить ячейки с работающими ссылками одним цветом, а с неработающими - другим?
Заранее спасибо!
Заранее спасибо!
12.02.2011 17:00:10
Под "битой ссылкой" я подразумеваю ссылку, по которой в браузере ничего не откроется. В результате работы макроса нужно чтобы получилось что-то похожее на пример в файле.
|
|
|
|
12.02.2011 18:56:05
Мне вот интересно - сколько времени потребуется макросу для открытия 10 000 страниц :-)
|
|
|
|
12.02.2011 19:06:26
{quote}{login=Юрий М}{date=12.02.2011 06:56}{thema=}{post}Мне вот интересно - сколько времени потребуется макросу для открытия 10 000 страниц :-){/post}{/quote}
Юра так автор про скорость вообще ничего не упоминал. Согласно заявленным требованиям задачу решили...... а ну да..... надо подсветить Sub vaha() For i = 1 To 10 On Error Resume Next Range("A" & i).Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True If Err.Number <> 0 Then Err.Clear: Range("A" & i).Interior.Color = 255 Next End Sub вот и подсветили, а знал бы как браузер убить убил бы... =96000=
|
|||
|
|
12.02.2011 19:09:47
Дим, так я ведь без какого-либо намёка в твой адрес :-) Мне действительно интересно.
|
|
|
|
12.02.2011 19:20:18
{quote}{login=Юрий М}{date=12.02.2011 07:09}{thema=}{post}Дим, так я ведь без какого-либо намёка в твой адрес :-) Мне действительно интересно.{/post}{/quote}
Юра так можно и рейтинги сайтов поднимать, поставил на ночь пусть молотит пока оперативы хватит. :)
|
|||
|
|
12.02.2011 19:28:55
:-) Вот сюда глянь:
|
|
|
|
12.02.2011 19:32:37
Ещё вот это попалось:
Private x As Object Private Sub Command1_Click() Set x = CreateObject("InternetExplorer.Application") ' Окно браузера видимо x.Visible = True ' Переход по ссылке x.Navigate "http://bit.pirit.info/forum" End Sub Private Sub Command2_Click() x.Quit ' Закрытие окна браузера End Sub |
|
|
|
12.02.2011 22:29:20
новая вводная: браузер открывать не нужно.
|
|
|
|
12.02.2011 22:59:32
{quote}{login=vaha}{date=12.02.2011 10:29}{thema=как проверить вебссылки на наличие битых}{post}новая вводная: браузер открывать не нужно.{/post}{/quote}
Новая вводная !? Гугл Вам поможет, там и вводите (:)<
|
|||
|
|
12.02.2011 23:17:46
Юра спасибо , познавательно, но скорость точно там не увеличишь.
Единственное что приходит в голову cmd ping и ловить время отклика или ошибку
|
|||
|
|
12.02.2011 23:25:55
Так я уже не про скорость - про закрытие обозревателя :-)
И про ожидание загрузки страницы там тоже мелькало... |
|
|
|
12.02.2011 23:41:15
{quote}{login=Юрий М}{date=12.02.2011 11:25}{thema=}{post}Так я уже не про скорость - про закрытие обозревателя :-)
И про ожидание загрузки страницы там тоже мелькало...{/post}{/quote} я уже нашел решение через cmd , но скорость тоже не ахти, но броузер не участвует проверка занимает около 2 сек это ошибка ЏаЁ Їа®ўҐаЄҐ бўп§Ё Ґ г¤ «®бм ®Ў аг¦Ёвм г§Ґ« maiffl.ru. Џа®ўҐам⥠Ё¬п г§« Ё Ї®ўв®аЁвҐ Ї®ЇлвЄг. это верный ЋЎ¬Ґ Ї ЄҐв ¬Ё б mail.ru [94.100.191.202] Ї® 32 Ў ©в: ЋвўҐв ®в 94.100.191.202: зЁб«® Ў ©в=32 ўаҐ¬п=37¬б TTL=251 ЋвўҐв ®в 94.100.191.202: зЁб«® Ў ©в=32 ўаҐ¬п=41¬б TTL=251 ЋвўҐв ®в 94.100.191.202: зЁб«® Ў ©в=32 ўаҐ¬п=38¬б TTL=251 ЋвўҐв ®в 94.100.191.202: зЁб«® Ў ©в=32 ўаҐ¬п=41¬б TTL=251 ‘в вЁбвЁЄ Ping ¤«п 94.100.191.202: Џ ЄҐв®ў: ®вЇа ў«Ґ® = 4, Ї®«г祮 = 4, Ї®вҐап® = 0 (0% Ї®вҐам), ЏаЁЎ«Ё§ЁвҐ«м®Ґ ўаҐ¬п ЇаЁҐ¬ -ЇҐаҐ¤ зЁ ў ¬б: ЊЁЁ¬ «м®Ґ = 37¬бҐЄ, Њ ЄбЁ¬ «м®Ґ = 41 ¬бҐЄ, ‘।ҐҐ = 39 ¬бҐЄ осталось обработать временный txt :)
|
|||
|
|
13.02.2011 00:05:58
Function Test_http(adr_http As String)
Dim wsh As Object Dim RegEx As Object, RegM As Object Dim FSO As Object, fil As Object Dim ts As Object, txtAll As String, TempFil As String Set wsh = CreateObject("WScript.Shell") Set FSO = CreateObject("Scripting.FileSystemObject") Set RegEx = CreateObject("vbscript.regexp") TempFil = "C:\http_temp.txt" wsh.Run "%comspec% /c ping " & adr_http & " > " & TempFil, 0, True With RegEx .Pattern = "(\d{1,3}\.){3}\d{1,3}" .Global = False End With Set fil = FSO.GetFile(TempFil) Set ts = fil.OpenAsTextStream(1) txtAll = ts.ReadAll On Error Resume Next Set RegM = RegEx.Execute(txtAll) If Err.Number = 5 Then Test_http = RegM(0) Else Test_http = "Err" End If ts.Close Kill TempFil Set ts = Nothing Set wsh = Nothing Set fil = Nothing Set FSO = Nothing Set RegM = Nothing Set RegEx = Nothing End Function
|
|||
|
|
13.02.2011 00:33:22
{quote}{login=R Dmitry}{date=13.02.2011 12:05}{thema=ну вот наваял}{post}Function Test_http(adr_http As String)
Dim wsh As Object Dim RegEx As Object, RegM As Object Dim FSO As Object, fil As Object Dim ts As Object, txtAll As String, TempFil As String Set wsh = CreateObject("WScript.Shell") Set FSO = CreateObject("Scripting.FileSystemObject") Set RegEx = CreateObject("vbscript.regexp") TempFil = "C:\http_temp.txt" wsh.Run "%comspec% /c ping " & adr_http & " > " & TempFil, 0, True With RegEx .Pattern = "(\d{1,3}\.){3}\d{1,3}" .Global = False End With Set fil = FSO.GetFile(TempFil) Set ts = fil.OpenAsTextStream(1) txtAll = ts.ReadAll On Error Resume Next Set RegM = RegEx.Execute(txtAll) If Err.Number = 5 Then Test_http = RegM(0) Else Test_http = "Err" End If ts.Close Kill TempFil Set ts = Nothing Set wsh = Nothing Set fil = Nothing Set FSO = Nothing Set RegM = Nothing Set RegEx = Nothing End Function{/post}{/quote} шьерт перепутал..... If Err.Number = 5 Then Err.Clear Test_http = "Err" Else Test_http = RegM(0) End If
|
|||
|
|
13.02.2011 00:51:13
от 4 до 6 сек один адрес
10 000 за три дня перемолотит
|
|||
|
|
13.02.2011 01:18:36
{quote}{login=R Dmitry}{date=13.02.2011 12:51}{thema=}{post}от 4 до 6 сек один адрес {/post}{/quote}
Это если узел ответит? А если молчит? |
|
|
|
13.02.2011 01:42:12
{quote}{login=Юрий М}{date=13.02.2011 01:18}{thema=Re: }{post}{quote}{login=R Dmitry}{date=13.02.2011 12:51}{thema=}{post}от 4 до 6 сек один адрес {/post}{/quote}
Это если узел ответит? А если молчит?{/post}{/quote} 94.100.191.201***3,218018 79.174.64.68***3,171875 Err***0,2189941 77.88.21.3***3,218994 Err***2,5 все равно нахомутал с ошибкой :) так точно работает Function Test_http(adr_http As String) Dim wsh As Object Dim RegEx As Object, RegM As Object Dim FSO As Object, fil As Object Dim ts As Object, txtAll As String, TempFil As String Set wsh = CreateObject("WScript.Shell") Set FSO = CreateObject("Scripting.FileSystemObject") Set RegEx = CreateObject("vbscript.regexp") TempFil = "C:\http_temp.txt" wsh.Run "%comspec% /c ping " & adr_http & " > " & TempFil, 0, True With RegEx .Pattern = "(\d{1,3}\.){3}\d{1,3}" .Global = False End With Set fil = FSO.GetFile(TempFil) Set ts = fil.OpenAsTextStream(1) txtAll = ts.ReadAll On Error Resume Next Set RegM = RegEx.Execute(txtAll) Test_http = RegM(0) If Err.Number <> 0 Then Err.Clear Test_http = "Err" End If ts.Close Kill TempFil Set ts = Nothing Set wsh = Nothing Set fil = Nothing Set FSO = Nothing Set RegM = Nothing Set RegEx = Nothing End Function Sub hdhdh() Dim tm As Single tm = Timer Debug.Print Test_http("yajjjj.ru") & "***" & Timer - tm 'Debug.Print Timer - tm End Sub
|
|||
|
|
13.02.2011 10:46:37
Может, так немного быстрее будет (1 запрос, 1 байт)
wsh.Run "%comspec% /c ping -n 1 -l 1 " & adr_http & " > " & TempFil, 0, True |
|
|
|
13.02.2011 16:28:14
{quote}{login=Казанский}{date=13.02.2011 10:46}{thema=}{post}Может, так немного быстрее будет (1 запрос, 1 байт)
wsh.Run "%comspec% /c ping -n 1 -l 1 " & adr_http & " > " & TempFil, 0, True{/post}{/quote} Может, и быстрее, но таким способом ссылки не проверить. 1) не факт, что сервер будет отвечать на ping (на некоторых серверах пинги намеренно закрываются) 2) наличие пинга ничего не говорит о доступности сайта (пинг может проходить, а сайт быть недоступен - к примеру, если веб-сервер не запущен) 3) запросы DNS для несуществующих имен занимают много времени (около 5-6 секунд на запрос) 4) на веб-сервере может быть установлен редирект, и т.д. и т.п. Короче, единственно верный вариант - пытаться по каждой ссылке загрузить страницу - разумеется, без видимого запуска браузера (не обязательно дожидаться полной загрузки - достаточно получить ответ веб-сервера, и проанализировать код возврата) Но это тоже весьма длительный процесс - 10 тыс. ссылок будут проверяться ОЧЕНЬ долго. Могу сделать макрос - но не бесплатно (работы много, если хотите, чтобы работало относительно быстро) |
||||
|
|
|||