scribd如何阻止下载

时间:2018-05-11 13:32:29

标签: drm scribd

在scribd.com上阅读BOOKS时,未启用下载功能。甚至浏览html源代码我无法下载实际的书。伟大的东西......但他们怎么做到这一点? 我希望实现类似的东西,以访问者无法下载文件的方式显示pdf(或从pdf转换)

我见过的大多数解决方案都是基于对网址的贬低......但是只要稍加努力,人们就可以找到网址并下载文件。 ScribD似乎已经很好地解决了这个问题。

有任何建议,想法如何实施这样的下载保护?

1 个答案:

答案 0 :(得分:0)

它实际上可以根据翻转页面时发出的AJAX请求来动态构建HTML。它不是基于图像的。因此,您很难下载内容。

但是,目前还不安全。我在下面提供了一个解决方案,用于下载今天(2020年1月27日)有效的图书,而不是教您如何做(这是不合法的),而是向您展示如何预防(或至少使之更加困难)如果您正在构建类似内容,则用户无法下载内容。

如果您拥有付费帐户并打开书页(单击“开始阅读”时打开的书页),则可以通过加载诸如dom-to-image之类的库来下载每个书页的图像。 / p>

例如,您可以使用开发人员工具加载库(必须在页面控制台中键入下面显示的所有代码):

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,该软件可在后台寻找类似“机器人”的行为。