На самом деле он динамически создает HTML на основе запросов AJAX, сделанных во время перелистывания страниц. Это не основано на изображении. Вот почему вам трудно загружать контент.
Однако пока это не так безопасно. Ниже я представляю решение для загрузки книг, которое работает сегодня (27 января 2020 г.) не для того, чтобы научить вас, как это делать (это незаконно), а чтобы показать вам, как вы должны предотвратить (или, по крайней мере, усложнить) пользователей от загрузки контента, если вы создаете что-то подобное.
Если у вас есть платная учетная запись и вы открываете страницу книги (та, которая открывается, когда вы нажимаете «Начать чтение»), вы можете загрузить изображение каждой страницы книги, загрузив библиотеку, например dom-to-image.
Например, вы можете загрузить библиотеку с помощью инструментов разработчика (весь приведенный ниже код необходимо ввести в консоли страницы):
if (injectDomToImage == undefined) {
var injectDomToImage = document.createElement('script');
injectDomToImage.src = "https://cdnjs.cloudflare.com/ajax/libs/dom-to-image/2.6.0/dom-to-image.min.js";
document.getElementsByTagName('head')[0].appendChild(injectDomToImage);
}
И затем вы можете определить такие функции, как эти:
function downloadPage(page, prefix) {
domtoimage.toJpeg(document.getElementsByClassName('reader_and_banner_container')[0], {
quality: 1,
})
.then(function(dataUrl) {
var link = document.createElement('a');
link.download = `${prefix}_page_${page}.jpg`;
link.href = dataUrl;
link.click();
nextPage(page, prefix);
});
}
function checkPageChanged(page, oldPageCounter, prefix) {
let newPageCounter = $('.page_counter').html();
if (oldPageCounter === newPageCounter) {
setTimeout(function() {
checkPageChanged(page, oldPageCounter, prefix);
}, 500);
} else {
setTimeout(function() {
downloadPage(page + 1, prefix);
}, 500);
}
}
function nextPage(page, prefix) {
let oldPageCounter = $('.page_counter').html();
$('.next_btn').trigger('click');
// Wait until page counter has changed (page loading has finished).
checkPageChanged(page + 1, oldPageCounter, prefix);
}
function download(prefix) {
downloadPage(1, prefix);
}
Наконец, вы можете загрузить каждую страницу книги в виде изображения JPG, используя:
download('test_');
Он будет загружать каждую страницу как test_page_.jpg
Чтобы предотвратить такой тип «робота», они могли бы, например, использовать Re-CAPTCHA v3, которая работает в фоновом режиме, ища поведение, подобное «роботу».
person
Leandro Luque
schedule
27.01.2020