puppeteer csdn 登录 [失败, 跨域cookie无法解决]

妖精的绣舞 提交于 2020-07-27 13:49:29

 

使用 puppeteer 登录csdn

 暂时没能解决这个问题

 

滑块可以滑到右边

 

原因在于cookie

const puppeteer = require('puppeteer');
const uid = '===';
const pwd = '===';

(async () => {
  const browser = await puppeteer.launch({
    headless: true,   //有浏览器界面启动\
    // headless: false,   //有浏览器界面启动\
    // executablePath: '/path/to/Chrome'
    // slowMo: 100,       //放慢浏览器执行速度,方便测试观察
    // args: [            //启动 Chrome 的参数,详见上文中的介绍
    //   //   '–no-sandbox',
    //   '--disable-web-security',
    //   "--allow-cross-origin-auth-prompt",
    //   "--process-per-site"
    //   //   '--window-size=1280,960'
    // ],
    // ignoreDefaultArgs: ["--enable-automation"],
    // 貌似会清空数据...简直了, 而且必须关闭浏览器
    // userDataDir: "C:/Users/Ace/AppData/Local/Google/Chrome/User Data"
  });
  const page = await browser.newPage();

  const cookie = [
    {
      name: 'HMVT',
      value: "6bcd52f51e9b3dce32bec4a3997715ac|1593859020|",
      domain: ".hm.baidu.com"
    },
    {
      name: "HMACCOUNT",
      value: '37FD0ADD32BEA80A',
      domain: ".hm.baidu.com"
    },
    // {
    //   name:"TY_SESSION_ID",
    //
    // }
  ]


  // await page.goto('https://passport.csdn.net/login?code=public');
  await page.goto('https://editor.csdn.net/md/');

  await page.waitFor(2000)
  console.log('====')
  await page.screenshot({path: './example.png'});
  return
  // page.setBypassCSP(true)
  // page.setRequestInterception(true);
  // for (let c of cookie)
  //   await page.setCookie(c);

  const link = await page.$x('//*[@id="app"]/div/div/div[1]/div[2]/div[5]/ul/li[2]/a')
  // console.log(link[0])
  await link[0].click()


  // 输入账号 和 密码
  const passwordElement = await page.$('input[name=all]', {delay: 20});
  await passwordElement.type(pwd);

  const uidElement = await page.$('input[name=pwd]', {delay: 20});
  await uidElement.type(uid);

  return
  // 登录
  const subBtn = await page.$('.btn.btn-primary', {delay: 20});
  await subBtn.click()
  // await subBtn[0].click()


  await page.waitFor(2000)
  // 滑块
  const start = await page.$('span.nc_iconfont.btn_slide', {delay: 20});
  const startinfo = await start.boundingBox();
  console.log("startinfo", startinfo)


  const end = await page.$('span.nc-lang-cnt', {delay: 20});
  const endinfo = await end.boundingBox();
  console.log('endinfo,', endinfo)

  await page.waitFor(1000)
  await page.mouse.move(endinfo.x, endinfo.y);
  await page.waitFor(1000)
  await page.mouse.down();
  await page.waitFor(1000)
  for (let i = Math.random() * 10; i < endinfo.width; i += Math.random() * 10) {

    let x = Math.min(endinfo.width + endinfo.x - 30, endinfo.x + i)
    await page.mouse.move(x, endinfo.y + Math.random() + 5);
    await page.waitFor(10 + Math.random() * 10)
  }
  await page.waitFor(1000)
  await page.mouse.up();
  await page.waitFor(1000)

  await page.screenshot({path: './example.png'});
  await browser.close();


  const subBtn2 = await page.$('.btn.btn-primary', {delay: 20});
  await subBtn2.click()


  //等待页面跳转完成,一般点击某个按钮需要跳转时,都需要等待 page.waitForNavigation() 执行完毕才表示跳转成功
  // await Promise.all([
  //   okButtonElement.click(),
  //   page.waitForNavigation()
  // ]);

  // await page.screenshot({path: './example.png'});
  // await browser.close();


  /*

    await page.waitFor(1000)
    let sliderElement = await page.$('.alert-catch-success.nc-container') // 整个滑动条节点
    let slider = await sliderElement.boundingBox() // 返回元素的x,y坐标以及宽高
    console.log(slider)
    let sliderHandle = await page.$('.nc_iconfont.btn_slide') // 滑块节点
    let handle = await sliderHandle.boundingBox()
    console.log(handle)

    // 将鼠标放到滑块中心点。
    await page.mouse.move(handle.x + handle.width / 2, handle.y + handle.height / 2)
    // 按下鼠标
    await page.mouse.down()
    // 将鼠标右移到滑动条最右端
    await page.mouse.move(handle.x + slider.width, handle.y + handle.height / 2, { steps: 10 })
    // 放开鼠标
    await page.mouse.up()

    await page.waitFor(3000)
  */

})();

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!