微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 nodejs cookie 上解析站点时如何记住授权

如何解决在 nodejs cookie 上解析站点时如何记住授权

我去网站找一个授权表,如果找到了,我就登录,如果没有,我就做我需要的动作

let cookie_ = fs.readFileSync("cookies.json");//I am looking for a file with saved cookies
cookie = JSON.parse(cookie_);//Converting to json

nightmare
.goto('https://site.ru/login')//I go to the site
.cookies.set(cookie)//I substitute cookies from the file
.evaluate(function () {
    return document.querySelector('input[id="email"]');//I am looking for a field to enter mail
})
.then(function (page) {
    if(page) {//I check if there is a field for entering mail
        f().then(function (cookies) {//We get the result from the function
            require('fs').writeFileSync(//And write to file
                'cookies.json',JSON.stringify(cookies)
            );
        })

    } else {
        console.log('You are logged in');
    }
})
async function f() {//I call the function if we are not authorized
        return new Promise((resolve,reject) => {
            nightmare
                .goto('https://site.ru/login')
                .type('input[id="email"]','login')//Enter mail
                .type('input[id="password"]','passord')//Enter your password
                .click('.btn.btn-danger')//Click on the authorization button
                .wait(2000)//We wait 2 seconds
                .cookies.get()//We receive cookies
                .then(resolve)

        });
    }

文件已创建,cookie 已写入,但在下次尝试运行脚本时,授权表单仍会出现

我也尝试先去 - goto('about: blank') 然后设置 cookies 然后去 goto('https://site.ru/login') 错误 - UnhandledPromiseRejectionWarning: Error: Setting cookie Failed

解决方法

很遗憾,无法通过nightmare解决问题 用 puppeteer

解决

示例 - 将 cookie 保存到文件

const puppeteer = require('puppeteer')
const fs = require('fs');

(async () => {
  const browser = await puppeteer.launch()
  const page = await browser.newPage()

  await page.goto('https://github.com/login')

  await page.type('#login_field',process.env.GITHUB_USER)
  await page.type('#password',process.env.GITHUB_PWD)

  await page.waitForSelector('.js-cookie-consent-reject')
  await page.click('.js-cookie-consent-reject')
  await page.$eval('[name="commit"]',(elem) => elem.click())
  await page.waitForNavigation()

  const cookies = await page.cookies()
  const cookieJson = JSON.stringify(cookies)

  fs.writeFileSync('cookies.json',cookieJson)

  await browser.close()
})()

从文件中读取 cookie

const puppeteer = require('puppeteer')
const fs = require('fs');

(async () => {
  const browser = await puppeteer.launch()
  const page = await browser.newPage()

  const cookies = fs.readFileSync('cookies.json','utf8')

  const deserializedCookies = JSON.parse(cookies)
  await page.setCookie(...deserializedCookies)

  await page.goto(`https://github.com/${process.env.GITHUB_USER}`)

  await browser.close()
})()

Article

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。