Ваш загруженный html просто в порядке. Проблема в вашей функции parseComicList
, потому что она ищет имя класса, которого нет в очищенном HTML-коде. Позвольте мне объяснить, что происходит.
Когда вы загружаете www.gocomics.com в свой браузер и просматриваете html, есть несколько тегов img с именами классов img-fluid lazyloaded
, которые вы ищете, и другие с именами классов lazyload img-fluid
. Прокрутите немного и снова проверьте HTML. Вы заметите, что теги img с именами классов lazyload img-fluid
изменились на img-fluid lazyloaded
. Смотрите скриншот ниже:
Это поведение, используемое этим сайтом, чтобы определить, ожидает ли изображение отложенную загрузку или нет, который обрабатывается внутри с помощью JavaScript при прокрутке сайта. Этот тип сценария отложенной загрузки обычно проверяет, находится ли изображение в окне просмотра или близко к входу в окно просмотра, и это делается путем сравнения положения прокрутки с положением изображения. Только тогда имена классов lazyload img-fluid
изменятся на img-fluid lazyloaded
.
Ваш вызов извлечения загружает только html-страницу этой страницы, но браузер не взаимодействует с этим кодом, то есть прокрутка отсутствует. Это означает, что, основываясь на моих наблюдениях о том, как имена классов этого сайта будут работать во время прокрутки, вы не найдете изображений с именами классов img-fluid lazyloaded
.
Вместо этого сделайте html.indexOf('lazyload img-fluid')
, чтобы искать изображения с начальным именем класса, и это будет работать. См. Пример ниже:
Еще один совет, который не подвергает вас ленивой загрузке логики сайта, - поиск тегов предков. со статическими именами классов, такими как comic__image
или item-comic-image
, а затем - нахождение первого тега img сразу после этой позиции. В некоторых случаях это может быть лучше, потому что это поможет вам убедиться, что вы сопоставляете только изображения внутри постов, вместо того, чтобы сопоставлять любые ленивые изображения загрузки сайта. В этом случае он начинает пропускать первое изображение, которое находится внутри верхнего баннера. См. Пример ниже:
Глобальная функция Boolean ()
может использоваться для преобразования типов при вызове без new
, например
var foo = Boolean(bar); // equivalent to `var foo = !!bar`
При вызове с new
, объект-оболочка будет создан дополнительно, что означает, что вы можете назначить объекту произвольные свойства:
var foo = new Boolean(bar); // equivalent to `var foo = Object(Boolean(bar));`
foo.baz = 'quux';
alert(foo.baz);
Это невозможно с примитивными значениями, поскольку примитивы не могут содержать свойства:
var foo = true;
foo.baz = 'quux';
alert(foo.baz); // `foo.baz` is `undefined`
Назначение свойства объекту примитив не вызывает ошибки из-за автоматической упаковки, т.е.
foo.baz = 'quux';
будет интерпретироваться как
// create and immediately discard a wrapper object:
(new Boolean(foo)).baz = 'quux';
. Чтобы вернуть примитивное значение, вам нужно будет вызвать метод valueOf ()
. Это необходимо, если вы действительно хотите использовать обернутое значение, потому что объекты всегда оценивают значение true
в логических контекстах - даже если обернутое значение равно false
.
I '