Не удается проанализировать список HTMLCollection

#javascript #html #web-scraping

#javascript #HTML #веб-очистка

Вопрос:

Я пытаюсь удалить некоторые ссылки с сайта, используя javascript. В приведенном ниже HTML у меня есть несколько ссылок в теге ‘a’. И я использую следующий JS.

Проблема в том, что я не могу получить ссылки из myChildList.

Когда я утешаю.войдите в myDownloadDiv, он показывает мне вывод как object HTMLElement. Когда я утешаю.зарегистрируйте myChildList (т.е. дочерние элементы htmlэлемента) Я получаю что-то вроде HTMLCollection [a.dropdown-item.disabled], в котором длина равна 2, и с обоими тегами привязки и со всеми их свойствами в нем со ссылками.

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

 <a class="dropdown-item disabled"></a>
 

Я не понимаю, делаю ли я что-то неправильно при разборе списка HTMLCollection.

 var myDownloadDiv = document.getElementById("pickDownload");
var myChildList = myDownloadDiv.children;
console.log(myChildList);

for (var j of myChildList) {
  console.log(j);
} 
 <div class="col-12 col-sm-3">
  <div class="dropup">
    <a href="" class="btn btn-secondary btn-block dropdown-toggle" id="downloadMenu" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
            Download
            </a>

    <div class="dropdown-menu" id="pickDownload" aria-labelledby="downloadMenu">
      <a href="https://fainbory.com/4eQM" class="dropdown-item" target="_blank">
        <span class="badge badge-primary">BD</span> Elysium - 720p (129 MB)
      </a>
      <a href="https://fainbory.com/4eQP" class="dropdown-item" target="_blank">
        <span class="badge badge-primary">BD</span> Elysium - 1080p (239 MB)
      </a>
    </div>
  </div>
</div> 

Редактировать:

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

Комментарии:

1. Я попробовал ваш код с snippet опцией, и в консоли было зарегистрировано 2 элемента.

2. @TalRofe Выпадающее меню по умолчанию скрыто. Может ли это что-то изменить?

3. Если вы имеете hidden в виду CSS, то CSS не должен влиять на эти console.log результаты.

4. Я сделал вам фрагмент. Кажется, он работает так, как ожидалось

5. Это ссылка на сайт, который я пытаюсь очистить. animepahe.com/play/96afc1bc-52d2-9679-cce3-58517c495cab / … Я также не понимаю, почему фрагмент не работает на сайте.

Ответ №1:

Похоже, ваш цикл работает.

Возможно, вы имели в виду это

 const links = [...document.querySelectorAll("#pickDownload a")].map(link => link.href);
console.log(links); 
 <div class="col-12 col-sm-3">
  <div class="dropup">
    <a href="" class="btn btn-secondary btn-block dropdown-toggle" id="downloadMenu" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
            Download
            </a>

    <div class="dropdown-menu" id="pickDownload" aria-labelledby="downloadMenu">
      <a href="https://fainbory.com/4eQM" class="dropdown-item" target="_blank">
        <span class="badge badge-primary">BD</span> Elysium - 720p (129 MB)
      </a>
      <a href="https://fainbory.com/4eQP" class="dropdown-item" target="_blank">
        <span class="badge badge-primary">BD</span> Elysium - 1080p (239 MB)
      </a>
    </div>
  </div>
</div> 

Вот букмарклет

 javascript:(function() { const links = [...document.querySelectorAll("#pickDownload a")].map(link => link.href); console.log(links))()
 

Комментарии:

1. Фрагмент работает отлично, но он не работает на рассматриваемом сайте. Пожалуйста, проверьте следующую ссылку: animepahe.com/play/96afc1bc-52d2-9679-cce3-58517c495cab /…

2. Работает для меня, когда я запускаю консоль

3. Вот букмарклет javascript:(function() { const links = [...document.querySelectorAll("#pickDownload a")].map(link => link.href); console.log(links))()

4. Хорошо, итак, я попробовал решения, и все сработало отлично, когда я загрузил всю страницу и добавил JS в тег script в HTML-файл. Спасибо, я использовал Tampermonkey ext. ранее для запуска JS-кода на сайте. Хотя я до сих пор не знаю, почему Tampermonkey не работает, когда я пытаюсь это сделать.

5. Возможно, скрипт tampermonkey запускается до завершения загрузки страницы?

Ответ №2:

ваш код правильный и работает правильно на моей машине, я думаю, что есть проблема с вашим объектом console.

Пожалуйста, попробуйте удалить этот импорт https://static.lalaping.com/online.js?ver=2.0.0:formatted Я подозреваю, что консольный объект там перезаписан.

Вы можете убедиться в этом на своем сайте, просто запустив в консоли браузера следующие команды:

 // Restore console object:
var i = document.createElement('iframe');
i.style.display = 'none';
document.body.appendChild(i);
window.console = i.contentWindow.console;

// Run your code:
var myDownloadDiv = document.getElementById("pickDownload");
var myChildList = myDownloadDiv.children;
console.log(myChildList);

for (var j of myChildList) {
  console.log(j);
}
 

Комментарии:

1. Это не его страница. И букмарклет, который я написал, работает просто отлично