【问题标题】:Error on Goto function on playwright when navigate to PDF file导航到 PDF 文件时,剧作家的 Goto 功能出错
【发布时间】:2021-12-05 22:16:45
【问题描述】:

我有这个链接https://nfse.blumenau.sc.gov.br/contrib/app/nfse/rel/rp_nfse_v23.aspx?s=61154301&e=00165960000101&f=2BED3D1E8(如果你尝试访问它会要求解决验证码,但只要我已经有会话,剧作家就不需要担心)。

OUT page.goto: net::ERR_ABORTED at https://nfse.blumenau.sc.gov.br/contrib/app/nfse/rel/rp_nfse_v23.aspx?s=61154301&e=00165960000101&f=2BED3D1E8

有人知道为什么剧作家不能访问它吗?我需要下载这个链接的PDF Buffer。

【问题讨论】:

    标签: javascript typescript playwright


    【解决方案1】:

    您可以使用fetch API。像这样的:

    const fetchResponse = browserContect.request.get('https://nfse.blumenau.sc.gov.br/contrib/app/nfse/rel/rp_nfse_v23.aspx?s=61154301&e=00165960000101&f=2BED3D1E8')
    const pdfBuffer = await fetchResponse.body();
    

    【讨论】:

    • 问题是我需要在上面插入cookie。我尝试使用 got 模块,但它也不起作用。
    • 这将使用浏览器上下文中的 cookie。
    • 啊,现在我明白了。是的,你的权利,谢谢!
    【解决方案2】:

    我已经试过了,但也没有用:

    const cookie = (await page.context().cookies()).filter(cookie => cookie.name === 'ASP.NET_SessionId')
                                                   .map(cookie => cookie.value)[0];
    console.log(cookie);
    const cookieJar = new CookieJar();
    const setCookie = promisify(cookieJar.setCookie.bind(cookieJar));
    
    await setCookie('ASP.NET_SessionId=' + cookie, urlFinal);
    
    const response = await got(urlFinal, {cookieJar}).buffer();
    

    这真的是一个挑战。因为如果我不使用 page.goto,我会失去会话。下面的代码可以解决问题。

    await page.goto(urlFinal);
    

    【讨论】:

    • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
    【解决方案3】:

    找到解决方案:

    首先我没有在函数调用时连接 cookie

    const cook = 'ASP.NET_SessionId=' + cookie;    
    await setCookie(cook, urlFinal);
    

    然后我使用 got 模块放置 cookie 并获取 pdf 的缓冲区:

    response = await got(urlFinal, {cookieJar}).buffer();
    

    另外:有时它会返回一个空白的 pdf(我认为是因为加载超时)。所以我插入了一个循环来检查缓冲区的大小并尝试了 20 次,直到它超过“X”的长度。

    for (let j = 0;j<=25;j++){
                                    console.log('Entrei no looping ==> ' + j);
                                    response = await got(urlFinal, {cookieJar}).buffer();
                                    if (response.toString().length>=10000){
                                        j=21;
                                    }
                                }
                                console.log('tamanho do buffer ==> ' + response.toString().length);
    

    【讨论】:

      猜你喜欢
      • 2022-10-06
      • 1970-01-01
      • 2022-11-09
      • 2023-03-13
      • 2020-11-16
      • 1970-01-01
      • 2021-04-20
      • 2022-11-04
      • 2022-12-22
      相关资源
      最近更新 更多