#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. Это не его страница. И букмарклет, который я написал, работает просто отлично