Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Как открыть случайную ссылку в том же окне (https://javascript.ru/forum/events/65716-kak-otkryt-sluchajjnuyu-ssylku-v-tom-zhe-okne.html)

vbvt 04.11.2016 15:01

Как открыть случайную ссылку в том же окне
 
Help!
Использую для автоматизации расширение "Chromium browser automation".
В нем можно использовать код Javascript.
Например: на странице много ссылок, надо открыть в том же окне любую случайную ссылку, которая еще не открывалась.
Как это сделать с помощью Javascript?
Спасибо.

Aetae 04.11.2016 15:29

Любую - легко. Которая не открывалась - совсем другое дело.
Проблема в том что обычный javascript в целях безопасности никаким образом не может узнать по каким ссылкам ходили, а по каким - нет.
Потому решение тут зависит от того, даёт ли данное расширение доступ к потрохам браузера, ибо если нет - придётся писать своё, либо же вручную с самого начала отслеживать всю активность на сайте и запоминать в отдельное хранилище переходы.

vbvt 04.11.2016 15:48

Есть же параметр history, с ним нельзя? А насчет потрохов, не знаю.
Хорошо, тогда открыть одну случайную ссылку с тегом <li>.

Aetae 04.11.2016 15:54

Ссылки, они с тегом <a>. Что подразумевается тут: ссылка внутри тега <li>, ссылка содержащая внутри себя тег <li>, <li> который при клике javascript'ом открывает окно?

vbvt 04.11.2016 15:59

Ссылка обернутая тегом <li><a href="..."></a></li>

Aetae 04.11.2016 16:36

function followRandomLink(){
  var links = document.querySelectorAll('li a');
  links[Math.floor(Math.random()*links.length)].click();
}

vbvt 04.11.2016 17:58

Что-то не открывает.
Может посмотрите ссылку на туториал http://chrome-automation.com/inject-cs
Там есть разные действия.

Aetae 04.11.2016 18:13

Функцию то вы запусткаете?

fuckingquest 04.11.2016 18:19

<html>
<body>
<ul>
<li><a href = "http://google.ru">google</a></li>
<li><a href = "http://ya.ru">ya</a></li>
<li><a href = "http://javascript.ru">javascript</a></li>
</ul>
<button onclick = "location = document.links[Math.floor(Math.random() * document.links.length)]"> follow random link </button>
</body>
</html>

vbvt 04.11.2016 18:52

Цитата:

Сообщение от Aetae (Сообщение 434067)
Функцию то вы запусткаете?

Хрен знает, что там запускается.
Я вставил код в cs-Inject, не работает.
Есть еще действие click, а что там прописать, не знаю.

Aetae 04.11.2016 19:02

Вставляйте так:
var links = document.querySelectorAll('li a');
  links[Math.floor(Math.random()*links.length)].click();

Но вообще это не дело, если хотите что-то себе автоматизировать - придётся хотябы базово изучить тот или иной скриптовой язык.

vbvt 04.11.2016 19:14

Работает. Страница открылась, на ней тоже нужно открыть случайную ссылку с <li>. Дублировал это же действие. Не открывает. Почему?

PS
Да, надо изучать javascript.

vbvt 04.11.2016 21:20

Цитата:

Сообщение от Aetae (Сообщение 434075)
Вставляйте так:
var links = document.querySelectorAll('li a');
  links[Math.floor(Math.random()*links.length)].click();

Но вообще это не дело, если хотите что-то себе автоматизировать - придётся хотябы базово изучить тот или иной скриптовой язык.

Спасибо, добрый человек.:yes:
Разобрался. Все работает.:dance:

vbvt 04.11.2016 23:28

Цитата:

Сообщение от Aetae (Сообщение 434075)
Вставляйте так:
var links = document.querySelectorAll('li a');
  links[Math.floor(Math.random()*links.length)].click();

Но вообще это не дело, если хотите что-то себе автоматизировать - придётся хотябы базово изучить тот или иной скриптовой язык.

Еще вопрос.
Если на странице вообще нет ссылок, как сделать переход, например на http://yandex.ru

Aetae 05.11.2016 00:15

var links = document.querySelectorAll('li a');
if(links.length == 0) {
  location = 'http://yandex.ru';
} else {
  links[Math.floor(Math.random()*links.length)].click();
}

vbvt 05.11.2016 00:46

Цитата:

Сообщение от Aetae (Сообщение 434098)
var links = document.querySelectorAll('li a');
if(links.length == 0) {
  location = 'http://yandex.ru';
} else {
  links[Math.floor(Math.random()*links.length)].click();
}

Благодарствую. Работает.
Пробовал также через if и else, только напутал с переменной.
Спасибо.:yes:

vbvt 13.11.2016 09:50

Цитата:

Сообщение от Aetae (Сообщение 434075)
Вставляйте так:
var links = document.querySelectorAll('li a');
  links[Math.floor(Math.random()*links.length)].click();

Но вообще это не дело, если хотите что-то себе автоматизировать - придётся хотябы базово изучить тот или иной скриптовой язык.

Ещё вопрос: вместо ссылок li открывать страницы типа http://сайт.ru/Directory/
Стоит ли пройти курс javascript Ильи Кантора или самому изучить по учебнику?

Aetae 13.11.2016 17:23

var links = [
  'http://сайт.ru/Directory/',
  'http://сайт.ru/Directory2/',
  'http://сайт.ru/Directory3/',
];
location = links[Math.floor(Math.random()*links.length)];
По поводу курсов - сами смотрите. Каждому свой тип обучения ближе. По мне - тут отличный учебник.

vbvt 13.11.2016 18:23

Цитата:

Сообщение от Aetae (Сообщение 434932)
var links = [
  'http://сайт.ru/Directory/',
  'http://сайт.ru/Directory2/',
  'http://сайт.ru/Directory3/',
];
location = links[Math.floor(Math.random()*links.length)];
По поводу курсов - сами смотрите. Каждому свой тип обучения ближе. По мне - тут отличный учебник.


Так не открывается.
В директории http://сайт.ru/Directory/ нужно открыть любую страницу с неизвестным именем. Имена такого вида http://сайт.ru/Directory/vbvt или 12657vbvt.

Deff 14.11.2016 05:55

vbvt http://htmlbook.ru/html/base,

vbvt 14.11.2016 17:36

Там нет тега <base>.
При открытии страницы http://сайт.ru/Directory/ на ней нет ссылок, как таковых. А фактически они есть и имеют такой вид http://сайт.ru/Directory/name. Name может быть из букв, из цифр, и вместе.
А общий список ссылок на сайте скрыт. Что можете предложить?

Deff 15.11.2016 04:54

vbvt,
Тег <base> можно вставить самому или как HTML или скриптом
<!DOCTYPE>
<html>
<head>
<body>
<script type="text/javascript">
document.write('<base href="http://javascript.ru/forum/events/">')
alert('Перейти на страницу - ? \n\n"65716-kak-otkryt-sluchajjnuyu-ssylku-v-tom-zhe-okne-3.html#post435027"');
location.href = '65716-kak-otkryt-sluchajjnuyu-ssylku-v-tom-zhe-okne-3.html#post435027';
</script>
</body>
</html>

vbvt 16.11.2016 16:16

Спасибо, с <base> что-то не получается.

vbvt 19.11.2016 16:09

Цитата:

Сообщение от Aetae (Сообщение 434932)
var links = [
  'http://сайт.ru/Directory/',
  'http://сайт.ru/Directory2/',
  'http://сайт.ru/Directory3/',
];
location = links[Math.floor(Math.random()*links.length)];
По поводу курсов - сами смотрите. Каждому свой тип обучения ближе. По мне - тут отличный учебник.

Aetae, вот такой код:

var siteURL = "http://" + top.location.host.toString();
var $internalLinks = $("a[href^='"+siteURL+"'], a[href^='/'], a[href^='./'], a[href^='../'], a[href^='#']");

ищет все внутренние ссылки, как их вывести куда-нибудь?

Aetae 19.11.2016 16:34

$(document.body).append(
  $internalLinks
  .map(function(a){
    return a.href
  })
  .join('<br>')
)

vbvt 19.11.2016 18:20

Цитата:

Сообщение от Aetae (Сообщение 435503)
$(document.body).append(
  $internalLinks
  .map(function(a){
    return a.href
  })
  .join('<br>')
)

Спасибо, только что-то не фурычит. Я все ещё использую Chromium Browser Automation.

Alex_63 19.11.2016 18:53

vbvt,
Может так?
var siteURL = "http://" + top.location.host.toString();
var $internalLinks = $("a[href^='"+siteURL+"'], a[href^='/'], a[href^='./'], a[href^='../'], a[href^='#']");
$(document.body).append(
  $internalLinks
  .map(function(){
    return this.href
  })
  .join('<br>')
)

Aetae 19.11.2016 19:12

$(document.body).append(
  [].join.call(
    $internalLinks.map( function(){
      return this.href
    }),
    '<br>'
  )
)
Ох уж этот jq.

vbvt 19.11.2016 20:40

Цитата:

Сообщение от Aetae (Сообщение 435514)
$(document.body).append(
  [].join.call(
    $internalLinks.map( function(){
      return this.href
    }),
    '<br>'
  )
)
Ох уж этот jq.

Ничего. Правда я не понял, что должно получиться.

vbvt 19.11.2016 22:34

Цитата:

Сообщение от Aetae (Сообщение 435514)
$(document.body).append(
  [].join.call(
    $internalLinks.map( function(){
      return this.href
    }),
    '<br>'
  )
)
Ох уж этот jq.

Пардон, все работает, только ссылки выводятся как текст.
Можно ли сделать так чтобы поиск был по серверу, а не по странице?

vbvt 20.11.2016 17:02

Цитата:

Сообщение от Aetae (Сообщение 435514)
$(document.body).append(
  [].join.call(
    $internalLinks.map( function(){
      return this.href
    }),
    '<br>'
  )
)
Ох уж этот jq.

Aetae, я Вам не надоел?
Смотрите, вот адрес документа .../2014/11/19/1
Как открывать по очереди или случайно ссылки с id 'start' от 1 до конечного значения?
Это адрес ссылки расположения документа
.../?day=19&month=11&year=2014&topic=all&start=1

vbvt 26.11.2016 15:38

Сам разобрался. Благодарю всех участников.


Часовой пояс GMT +3, время: 08:14.