Author Topic: Помогите, как найти гиперссылки на странице?  (Read 3616 times)

0 Members and 1 Guest are viewing this topic.

wireshark

  • Освоившийся
  • **
  • Posts: 49
    • View Profile
Задача достаточно простая, кликер открывает страницу в браузере, на странице надо найти гиперссылку и кликнуть по ней. Страницы достаточно рамдомные, те нельзя привязаться к области.
Ссылок на страницах не много, достаточно если будет находить любую.

Единственное, что приходит в голову - двигать курсор и контролировать его вид. Но это крайне затратно по ресурсам (можно делать контроль не частым, но тогда есть вероятность пропустить), вторая более существенная проблема движение курсора становится рваным.
Как альтернатива (не проверял) - запустить выполнятся вторую задачу для контроля формы курсора, но нужно будет передать в основной скрипт, что надо остановить мышь и запустить подпрограмму, хз как все это реализовать.

Может я, что то упускаю и можно как то найти гиперссылки на странице другим путем?
« Last Edit: July 23, 2021, 06:06:45 PM by wireshark »

Космич

  • Активный участник
  • ***
  • Posts: 265
    • View Profile
по цвету?)
«Иногда ты ваяешь до тех пор, пока до тебя не дойдёт, что именно ты делаешь.»

kiril

  • Активный участник
  • ***
  • Posts: 106
    • View Profile
Re:кто ищет, тот всегда найдёт!
« Reply #2 on: July 23, 2021, 11:42:13 PM »
не полное описание задачи, но пусть оно останется на совести автора темы.
Клик, при изменении кода курсора решает задачу.
В настройках панели задач\мышь\указатели, можно задать на  " выбор ссылки" особый вид курсора, который больше ни где не используется, а можно просто кликать по тому, что сейчас по умолчанию, лишние клики на странице - это дополнительная активность и всегда в таких случаях только приветствуется.
 Но обычно нужно сначала запомнить координаты найденной ссылки и оставаться на странице заданное время, имитируя активность и интерес и только по его истечению переходить по ссылке на следующую. ;)

wireshark

  • Освоившийся
  • **
  • Posts: 49
    • View Profile
Re:кто ищет, тот всегда найдёт!
« Reply #3 on: August 25, 2021, 02:57:16 PM »
не полное описание задачи, но пусть оно останется на совести автора темы.
Клик, при изменении кода курсора решает задачу.
В настройках панели задач\мышь\указатели, можно задать на  " выбор ссылки" особый вид курсора, который больше ни где не используется, а можно просто кликать по тому, что сейчас по умолчанию, лишние клики на странице - это дополнительная активность и всегда в таких случаях только приветствуется.
 Но обычно нужно сначала запомнить координаты найденной ссылки и оставаться на странице заданное время, имитируя активность и интерес и только по его истечению переходить по ссылке на следующую. ;)
Спасибо, буду экспериментировать, думал есть какой то способ вытащить данные из кода страницы или еще какая магия. Постоянная проверка курсора достаточно ресурсоемка если делать на каждом шаге, да и на движении курсора отражается, он останавливается на момент проверки.

Отвечая на предыдущий вопрос, к сожалению ссылки цветом или как то иначе не выделены не на всех страницах, на некоторых есть выделение цветом, на других появляется подчеркивание, на третьих текст набран шрифтом того же цвета, что ссылки на других.

Ссылки могут быть в любом месте страницы, те я делаю хаотические движения и надеюсь, что под курсор попадет ссылка, при этом приходится условно каждые 5х5 пикселей смещения проверять его вид иначе можно пропустить
« Last Edit: August 25, 2021, 03:23:45 PM by wireshark »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Обычно ссылок на странице очень много. Элементы интерфейса часто тоже ссылки.
Если нужны все, их можно достать или подкрасить. Если нужны только ссылки из контекста, то как их отделить от остальных для всех сайтов без конкретики.

Можно с помощью JavaScript и плагина к браузеру подсветить все ссылки которые можно подсветить, потому что ссылки бывают не только текстовыми, но и кнопки и картинки и области картинки.


wireshark

  • Освоившийся
  • **
  • Posts: 49
    • View Profile
Спасибо за идею, я что то про плагины не подумал.
Вообще нужны любые ссылки включая элементы интерфейса. Нужно создать видимость, что за компьютером живой человек который серфит.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
На js можно подсветить текстовые ссылки. Что с картинками делать я без понятия. Но есть же расширения собирающие все ссылки на странице, только это наверно не подходит.


wireshark

  • Освоившийся
  • **
  • Posts: 49
    • View Profile
Все ссылки собирать нельзя, там скорее всего есть honeypot которые нормальным людям не видны. Поэтому нужны только видимые. Но за идею с плагином еще раз спасибо, попробую

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Можно вывести в консоль откуда сразу и кликать
Code: (javascript) [Select]
let links = document.querySelectorAll('a');
links.forEach(link => console.log(link.href));

Можно кликать на случайную ссылку самим JS
Code: (javascript) [Select]
var links = document.querySelectorAll('a');

function click_random_link() {
    // Получаем случайный ключ массива
    let rand = Math.floor(Math.random() * links.length);
    // красим ссылку на которую перейдём
    links[rand].style.backgroundColor = '#ff3c00';
    // Открываем ссылку в новом окне
    window.open(links[rand].href, '_blank')
    console.log('Переходим по ссылке:', links[rand].href)
}

// Переходим по ссылке через 1000 - 3000 ms
setTimeout(click_random_link, Math.random() * 2000 + 1000);

Если нужно подстраховаться и не учитывать скрытые, то получение объектов-ссылок можно изменить
Code: (clickermann) [Select]
// Все ссылки на странице
var links = document.querySelectorAll('a');
// Все ссылки на странице исключая скрытые
// visibility: hidden;
// display: none;
// opacity: 0;
var links = (Array.from(document.getElementsByTagName("a"))).map(i => {if (i.hostname == document.domain && getComputedStyle(i).visibility != 'hidden' && getComputedStyle(i).display != 'none' && getComputedStyle(i).opacity != '0') {return i.href}}).filter(i => i != undefined)

Если хочешь тыкать непременно кликером, можно их все подкрасить на странице, а кликером уже кликать куда нужно
Code: (javascript) [Select]
let links = document.querySelectorAll('a');
// красим ссылки
links.forEach(link => link.style.backgroundColor = '#00ff00');

« Last Edit: September 02, 2021, 02:42:48 PM by Vint »


wireshark

  • Освоившийся
  • **
  • Posts: 49
    • View Profile
спасибо!