puppeteer 用cookie登录osc批量修改文章

原文链接: puppeteer 用cookie登录osc批量修改文章

上一篇: 在线粒子动效制作和使用

下一篇: 希望有一天, 知识可以轻易的获取, 学习也不是为了谋生存

第一种是安装chrome-cookies-secure库, 但是只有在mac和linux上可行, win10安装失败

const chrome = require('chrome-cookies-secure');
const puppeteer = require('puppeteer');
const url = 'https://my.oschina.net/ahaoboy';

    chrome.getCookies(url, 'puppeteer', function(err, cookies) {
        if (err) {
            console.log(err, 'error');
            return
        }
        console.log(cookies, 'cookies');
        callback(cookies);
    } ) // e.g. 'Profile 2'
}
// find profiles at ~/Library/Application Support/Google/Chrome
getCookies(async (cookies) => {
    const browser = await puppeteer.launch({
        headless: false
    });
    const page = await browser.newPage();
    await page.setCookie(...cookies);
    await page.goto(url);
    await page.waitForTimeout(10000);
    browser.close()
});

第二种是通过访问自己主页面, 拿到实际使用的cookie字符串, 然后自己处理一下

const str = ``
const cookies = str.split(";").map(i => {
  const [name, value] = i.split("=")
  return {
    name: name.trim(),
    value: value.trim(),
    url: "https://my.oschina.net/ahaoboy",
  }
})
module.exports = cookies

批量修改状态

const puppeteer = require("puppeteer")
const cookies = require("./cookie")
const url = "https://my.oschina.net/ahaoboy"
const getBlogList = require("./blogList")
const sleep = (n = 100) => new Promise(r => setTimeout(r, n))
async function check(page, url) {
  console.log("check url", url)
  await page.goto(url)
  await sleep(1500)
  // 如果返回的是一个promise, 那么久等待这个promise结束
  const pageRendered = page.evaluate(async () => {
    const sleep = (n = 100) => new Promise(r => setTimeout(r, n))
    // 检查是否是隐藏
    const q1 = `#writeArticleWrapper > div > div > form > div.inline.fields.footer-fields > div:nth-child(4) > div > input.hidden`
    const d1 = document.querySelector(q1)
    if (d1.checked) {
      d1.click()
      await sleep(100)
    }
    // 如果没有选择分区
    const q2 = `#writeArticleWrapper > div > div > form > div.inline.fields.footer-fields > div.required.field.set-bottom.field-groups > div > div.menu`
    const d2 = document.querySelector(q2)
    const flag = [...d2.children].some(i => i.className.includes("selected"))
    if (!flag) {
      d2.children[0].click()
    }
    await sleep(200)
    // 提交修改
    const btn = document.querySelector(
      "#writeArticleWrapper > div > div > form > div.inline.field.actions > div",
    )
    btn.click()
    return await sleep(2000)
  })

  // 等待十秒, 或者所有图片加载完毕
  await Promise.race([pageRendered, sleep(6000)])
  try {
    await page.waitForSelector(".article-box__header", {
      visible: true,
      timeout: 4000,
    })
  } catch (e) {
    console.log("===e", e)
    return
  }
}
async function main() {
  const start = "https://my.oschina.net/ahaoboy/blog/write/1835346"
  const blogList = await getBlogList()
  while (true) {
    const t = blogList.shift().url
    console.log(t)
    if (t === start) break
  }
  console.log("blogList", blogList.length)
  console.log("blogList", blogList[0])
  const browser = await puppeteer.launch({
    headless: false,
  })
  const page = await browser.newPage()
  await page.setCookie(...cookies)
  await page.setViewport({
    width: 1920,
    height: 1080,
  })
  await page.goto(url)
  for (const { url } of blogList) {
    try {
      await check(page, url)
    } catch (e) {
      console.log("ee", e)
    }
  }
  browser.close()
}
main()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值