forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Алгоритмика (http://forum.boolean.name/forumdisplay.php?f=21)
-   -   URL в теле страницы (http://forum.boolean.name/showthread.php?t=17068)

impersonalis 22.07.2012 21:36

URL в теле страницы
 
Есть тело страницы (HTML). Необходимо выделить из него все ссылки (так или иначе доступные пользователю [в том числе, отображаемые в виде картинок], но без учёта всяких интегрируемых объектов типа перехода при клике внутри flash-объекта [от которого в HTML останется лишь уопминание]). Т.к. я не обладаю всем множеством возможных комбинаций для тестов, то спрошу. Верен ли алгоритм:
найти вхождение <a - это будет левая граница.
От найденного вхождения до > найти параметр href - его значение = искомый url.
Или всё гораздо сложнее?

RegIon 23.07.2012 17:59

Ответ: URL в теле страницы
 
проще:
PHP код:

<script>
var 
obj=document.body.getElementsByTag("a");
for(var 
i=0;i<obj.length;i++)
           
alert(obj[i].getAttribute('href'));
</script> 

инклудим в страницу и все ссылки алертом

impersonalis 23.07.2012 21:00

Ответ: URL в теле страницы
 
Спасибо, но в реализации твоей многое сокрыто за непонятными мне методами. Нельзя или их более отвлечённо от языка описать?

ABTOMAT 23.07.2012 21:06

Ответ: URL в теле страницы
 
PHP код:

<script>
var 
obj=document.body.getElementsByTag("a"); // из body страницы берутся все элементы "a"
for(var i=0;i<obj.length;i++) // Перебор их
           
alert(obj[i].getAttribute('href')); // Алертим атрибут href
</script> 

Правда я не уверен что Имперу годится жабаскриптовая реализация (правда если у Ипмера нет веских причин делать свой парсер лучше воспользоваться услугами браузера). А ещё я бы советовал юзать jQuery:
PHP код:

<script>
var 
links = $('a');
for(var 
i=0;i<links.length;i++){alert($(links[i]).attr('href'))}
</script> 


moka 23.07.2012 21:12

Ответ: URL в теле страницы
 
Если таки не в броузере а жабой, то тебе нужно искать открытие тега и закрытие. Чтобы подсветить, будет достаточно в открытии тега <a> до ">" добавить что-то типо:
style="background:#f00 !important"
Ссылка будет иметь тогда красный фон.
Если таки в броузере, делай примерно как описали. Если предоставишь пример html разметки, можно будет собрать jsfiddle пример.

ЗЫ, выкиньте же этот alert нафиг!

ABTOMAT 23.07.2012 21:17

Ответ: URL в теле страницы
 
Цитата:

Сообщение от MoKa (Сообщение 233959)
Если таки не в броузере а жабой, то тебе нужно искать открытие тега и закрытие. Чтобы подсветить, будет достаточно в открытии тега <a> до ">" добавить что-то типо:
style="background:#f00 !important"
Ссылка будет иметь тогда красный фон.
Если таки в броузере, делай примерно как описали. Если предоставишь пример html разметки, можно будет собрать jsfiddle пример.

ЗЫ, выкиньте же этот alert нафиг!

Не во всех браузерах работает console.log

SBJoker 23.07.2012 21:38

Ответ: URL в теле страницы
 
Регэкспом его!

moka 23.07.2012 21:51

Ответ: URL в теле страницы
 
Ну ты же не будешь разрабатывать в IE (в котором он не работает), поэтому использовать его нужно.

Разные броузеры по разному работают с alert'ами, некоторые не дают возможности отключить последующий скрипт, тем самым если ты запустишь такой код на огромной странице, с кучей ссылок, прийдётся зажимать enter или вырубать броузер, врубать снова и резко закрывать закладку (т.к. многие броузеры блокируют любой инпут мобальным окошком alert'а).

Разрабатывать нужно в FF + FireBug либо в Chrome. Можно заюзать также Espresso 2 (на маках рулит) для оффлайн разработки, там есть WebKit (как в Chrome) Inspector.

ABTOMAT 23.07.2012 21:57

Ответ: URL в теле страницы
 
Цитата:

Сообщение от MoKa (Сообщение 233966)
Ну ты же не будешь разрабатывать в IE (в котором он не работает), поэтому использовать его нужно.

Разные броузеры по разному работают с alert'ами, некоторые не дают возможности отключить последующий скрипт, тем самым если ты запустишь такой код на огромной странице, с кучей ссылок, прийдётся зажимать enter или вырубать броузер, врубать снова и резко закрывать закладку (т.к. многие броузеры блокируют любой инпут мобальным окошком alert'а).

Разрабатывать нужно в FF + FireBug либо в Chrome. Можно заюзать также Espresso 2 (на маках рулит) для оффлайн разработки, там есть WebKit (как в Chrome) Inspector.

Я в курсе. Для себя я использую console.log.
Когда вываливаю в Сеть примеры - меняю на alert.
Потому что например даже в FF без установленного FireBug вывод console.log не увидеть.
Всем постоянно говорю что Firebug нужно ставить но - как об стенку горох, а потом "а чо ничо не пишет?", надеюсь, ты меня понял.

impersonalis 23.07.2012 22:04

Ответ: URL в теле страницы
 
Цитата:

Сообщение от SBJoker (Сообщение 233963)
Регэкспом его!

Вариант конечно: нарезать по разделителям (пробелы, скобки <> и проч) страницу и прогнать элементы. Но мне казалось, что это более "в лоб". Думал регэксп использовать чтоб забраковать href-ы содержащие ссылки, получаемые в результате выполнения скрипта (т.е. не содержащие ссылки в явном виде).

moka 23.07.2012 22:22

Ответ: URL в теле страницы
 
Цитата:

Сообщение от ABTOMAT (Сообщение 233969)
Потому что например даже в FF без установленного FireBug вывод console.log не увидеть.
Всем постоянно говорю что Firebug нужно ставить но - как об стенку горох, а потом "а чо ничо не пишет?", надеюсь, ты меня понял.

MacOS X: Cmnd + Alt + K
Windows: Ctrl + Shift + K
Чтобы открыть штатный консоль. Он кстати как по мне намного лучше чем FireBug'овский.

ABTOMAT 23.07.2012 22:35

Ответ: URL в теле страницы
 
Цитата:

Сообщение от MoKa (Сообщение 233975)
MacOS X: Cmnd + Alt + K
Windows: Ctrl + Shift + K
Чтобы открыть штатный консоль. Он кстати как по мне намного лучше чем FireBug'овский.

Так было не всегда.
Хватит спорить с моими привычками.

Randomize 23.07.2012 23:59

Ответ: URL в теле страницы
 
Цитата:

Сообщение от impersonalis (Сообщение 233971)
Вариант конечно: нарезать по разделителям (пробелы, скобки <> и проч) страницу и прогнать элементы. Но мне казалось, что это более "в лоб". Думал регэксп использовать чтоб забраковать href-ы содержащие ссылки, получаемые в результате выполнения скрипта (т.е. не содержащие ссылки в явном виде).

Фактически ссылки это:

<a{блабла}href="{блабла}"{блабла}>{блабла}</a>

То есть:
Цитата:

#<a\s[^>]*href=\"([^\"]*)\"[^>]*>(.*)<\/a>#siU

impersonalis 24.07.2012 10:55

Ответ: URL в теле страницы
 
Цитата:

Сообщение от Randomize (Сообщение 233996)
Фактически ссылки это:

<a{блабла}href="{блабла}"{блабла}>{блабла}</a>

То есть:

Если я применю этот регэксп целиком к телу, то получу просто false, не так ли? На что опираться выбирая разделители для нарезки тела на потенциальные ссылки?

moka 24.07.2012 13:50

Ответ: URL в теле страницы
 
Начало тега всегда одно "<a" далее может быть что угодно кроме ">" вне кавычек (это не просто вычислить). Далее рано или поздно будет (не обязательно кстати) "href=", кавычка может быть двойная за ним, или одинарная. Далее идёт что угодно кроме закрытия кавычки. Потом идёт опять что угодно до ">" вне открытых каких-либо кавычек.
То что между кавычек у href="", является ссылкой на которую будет перенаправление.
Далее после ">" может быть что угодно до "</a>". Основываясь W3C, ссылки в ссылке не может быть, и броузеры тоже такое не позволят.
Всё что между <a ....> и </a> будет телом ссылки, там может быть картинка (<img />), элементы, или текст. А может быть даже пусто, т.к. можно сделать элемент ссылки блоком и отображать с background'ом - альтернатива img, и лучше по многим факторам.


Часовой пояс GMT +4, время: 00:41.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot