@genericname1
Does this happen specifically when copying something inside BAS? In the script panel where the actions are or from the browser?
What version of BAS are you using?
Please record a video demonstrating the problem so that we can understand what is happening.
Оптимальный алгоритм парсинга для BAS
-
@ruzne Вот еще метод в ширину. Вопрос как это переложить на Для каждого элемента- Начать цикл
Поместить узел, с которого начинается поиск, в изначально пустую очередь.
Извлечь из начала очереди узел U и пометить его как развёрнутый.
Если узел U является целевым узлом, то завершить поиск с результатом «успех».
В противном случае, в конец очереди добавляются все преемники узла U, которые ещё не развёрнуты и не находятся в очереди.
Если очередь пуста, то все узлы связного графа были просмотрены, следовательно, целевой узел недостижим из начального; завершить поиск с результатом «неудача».
Вернуться к п. 2.
Примечание: деление вершин на развёрнутые и не развёрнутые необходимо для произвольного графа (так как в нём могут быть циклы). Для дерева эта операция не нужна, так как каждая вершина будет выбрана один-единственный раз. -
функция принимающая на вход урл,
переходит по этому урлу, получает со страницы все ссылки в массив селектором а. для каждой полученой ссылки вызывем ту же функцию
можно добавить после foo(iUrl) history.go(-1) - перейти к предидущей странициа я бы открывал каждую новую ссылку в новой вкладке, и после того как обошол все ссылки на первой вкладке переходил бы к следующей
-
@ruzne Повторюсь, я просил алгоритм для Для каждого элемента- Начать цикл.
Можете мне рассказать об алгоритме обхода по Вашему методу? То есть каким образом он сумеет перейти по всем ссылкам сайта, чтобы я понимал что это работает. А то, к сожалению, я не вижу как это решает задачу по обходу всех страниц. -
@romanbiz , ты все как-то усложняешь. Нет гарантий, что пройдешь по всем страницам. Пройдешь только по тем страницам, которые перелинкованы. Соответственно берешь те страницы, которые тебе уже известны и добавляешь их в список 1. Проходишь по ним и собираешь ссылки, сохраняешь в список 2 (может быть не за один проход, а как настроишь). Потом убираешь из списка 1 ссылки по которым прошел и переносишь их в список 3. Чистишь список 2 от дублей и вхождений строк из списка 3. Оставшееся переносишь в список 1. Повторяешь. Мне кажется, что тут принципиально нового не сделать ничего.
-
@romanbiz
0_1520263883664_test.xml
вероятно это будет работать.это лишшаблон необходимо добвавить нужные проверки и убрать лишние, так же проверить правильность формирования ссылок, в зависимости от того относительные они или абсолютные, а если го хистори не работает то заменить на загрузить страницу урл, он в том месте как раз востанавливается из стека
upd: там еще состояние forech нужно сохранять, но это домашняя работа, так же в стек -
@Denis_krsk Спасибо за мысль, я писал выше
Нет, sitemap никак не получить. Сайт закрытый. Ну и еще есть детали типа отсутствия ссылок в браузере (не IFRAME а JS), приходится сохранять каждую страницу с идентификатором, но я уже просто решил не грузить кучей подробностей. В общем нужен именно алгоритм обхода сайта.
-
Делаем ассоциированный массив VAR_LINKS = {}Делаем While цикл
while(true){ VAR_TEMP_LINKS = [] if(VAR_CYCLE_INDEX == 0) { //Тут собираем ссылки первый раз }else { //Проверка есть ли список для этой иттерации try{ var a = VAR_LINKS[VAR_CYCLE_INDEX] }catch(e){ _break() } Foreach(VAR_LINKS[VAR_CYCLE_INDEX]) //Парсим ссылки с каждой страницы в массив TEMP_LINKS } //Ложим в ассоц массив наш массив if(VAR_TEMP_LINKS.length > 0) VAR_LINKS[VAR_CYCLE_INDEX + 1 ] = VAR_TEMP_LINKS }За первый проход помещаем в массив спаршенных ссылок
VAR_LINKS = { 1:["ссылка1", "ссылка2"] }Следующий проход
VAR_LINKS = { 1:["ссылка1", "ссылка2"]; 2:["ссылка3", "ссылка4"] }При этом в общем цикле еще делаем добавление в общий список и ресурс, а так же проверку перед переходом по ссылке, что бы много раз не переходить по тем же ссылкам.
Так же желательно поменять переменный cycle index
П.С.
Мог ошибиться в где то в синтаксисе с асоц массивами, лень искать скрипт в котором этом реализовано, но факт того что это рабочее - подтверждаю на личном опыте. Делал такой "ПАУК" для одной соц сети, что собирать друзей друзей * N раз
