【问题标题】:How to use Google Docs Viewer with puppeteer?如何将 Google Docs Viewer 与 puppeteer 一起使用?
【发布时间】:2018-11-27 06:52:07
【问题描述】:

我想通过运行在 Node.js 中的 puppeteer 通过 Google Docs Viewer 预览文档。 该 URL 在浏览器中运行良好:
https://docs.google.com/viewer?url=https%3A%2F%2Fdocs.npmjs.com%2Fimages%2Fnpm.svg&embedded=true

但是在 puppeteer 中抛出错误:

(async () => {          
        const browser = await puppeteer.launch();
        const page = await browser.newPage();           
        page.on('response', res => {
            res.text().then(text => {
                console.log('response:', {
                    url: res.url(),
                    status: res.status(),
                    res_headers: res.headers(),
                    req_headers: res.request().headers(),
                    text: text
                });
            });
        });

        await page.setBypassCSP(true);
        await page.goto(url, {waitUntil: 'networkidle0'});
        let content = await page.content();            
        await browser.close();

        return content;
    })();

打印事件:

网址https://apis.google.com//scs/apps-static//js/k=oz.gapi.en_US.f5JujS1eFMY.O/m=googleapis_proxy/rt=j/sv=1/d=1/ed=1/am=QQE/rs=AGLTcCNDI1_ftdVIpg6jNiygedEKTreQ2A/cb=gapi.loaded_0
状态:200

控制台:加载资源失败:服务器响应状态为401()
网址https://content.googleapis.com/drive/v2internal/about?fields=importFormats,kind&key=AIzaSyDVQw45DwoYh632gvsP5vPDqEKvb-Ywnb8
text: {"error": {"errors": [{"domain": "global", "reason": "required","message": "需要登录"," locationType": "header","location": "Authorization"}],"code": 401,"message": "需要登录"}}

网址:'https://content.googleapis.com/drive/v2internal/viewerimpressions?key=AIzaSyDVQw45DwoYh632gvsP5vPDqEKvb-Ywnb8&alt=json'
状态:204

控制台:'加载资源失败:服务器响应状态为 403 ()'
网址:'https://content.googleapis.com/drive/v2internal/apps?fields=items(authorized,chromeExtensionIds,createInFolderTemplate,createUrl,icons(iconUrl,size,category),id,installed,kind,longDescription,name,objectType,openUrlTemplate,origins,primaryFileExtensions,primaryMimeTypes,productId,productUrl,rankingInfo,removable,requiresAuthorizationBeforeOpenWith,secondaryFileExtensions,secondaryMimeTypes,shortDescription,supportsCreate,supportsImport,supportsMultiOpen,supportsTeamDrives,type,useByDefault),kind&languageCode=en-US&key=AIzaSyDVQw45DwoYh632gvsP5vPDqEKvb-Ywnb8',
文本: {"error": {"errors": [{"domain": "global","re​​ason": "forbidden","message": "Forbidden"}], "code": 403,"message": "Forbidden"}},

当我比较 puppeter 和浏览器之间的 cookie 和标头时,标头“origin”、“x-origin”、“x-referrer”是相同的,但“x-chrome-connected”和“x-client” -日期”丢失。
cookie“NID”存在。

【问题讨论】:

    标签: puppeteer google-document-viewer


    【解决方案1】:

    仔细查看 Google 的回复:

    {"errors": [{"domain": "global", "reason": "required","message": "需要登录"}]}

    {"errors": [{"domain": "global","re​​ason": "forbidden","message": "Forbidden"}]}

    看来puppeteer Chromium 需要用Google 登录才能使用PDF 查看器功能。

    【讨论】:

    • 这就是问题所在。如何克服这些错误?如果我只是将上面的链接放在带有匿名会话的浏览器中,则一切正常,无需任何登录。
    • 这是一个好问题,我想这不是技术问题,而是与 Google 的权限和配额有关。
    • 但是 google 是如何区分 puppeter 和 browser 的呢?代理和来源是一样的。
    • 几个月前,我想在客户网站的 iframe 中使用这个查看器,但也被拒绝了,所以我认为这可能是一些权限问题?
    猜你喜欢
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-10
    • 2020-02-01
    相关资源
    最近更新 更多