文档章节

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

 阿豪boy
发布于 07/04 20:18
字数 568
阅读 51
收藏 0

「深度学习福利」大神带你进阶工程师,立即查看>>>

 

使用 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)
  */

})();

 

粉丝 26
博文 1829
码字总数 1211986
作品 0
西安
私信 提问
加载中
请先登录后再评论。
记一次失败的Perl + Nginx + FastCGI 配置过程

这两天心血来潮,不知道为什么和 Perl + Nginx + FastCGI 配置 耗上了。但是失败了,记录如下: 1)安装Nginx 1.4.3 ,我的是WINDOWS 7 系统,修改配置文件如下: location ~ .(pl|cgi|perl)?...

通吃岛-低手哥
2013/10/27
1.8K
7
访问安全控制解决方案

本文是《轻量级 Java Web 框架架构设计》的系列博文。 今天想和大家简单的分享一下,在 Smart 中是如何做到访问安全控制的。也就是说,当没有登录或 Session 过期时所做的操作,会自动退回到...

黄勇
2013/11/03
3.6K
8
beego API开发以及自动化文档

beego API开发以及自动化文档 beego1.3版本已经在上个星期发布了,但是还是有很多人不了解如何来进行开发,也是在一步一步的测试中开发,期间QQ群里面很多人都问我如何开发,我的业余时间实在...

astaxie
2014/06/25
2.7W
22
HTTPS切换工具--HttpsSwitcher

HttpsSwitcher 是一个帮你进行 HTTPS 切换的 Chrome 插件,本工具可以帮你尝试使用https打开指定的域名,点击本插件的浏览器图标后会自动切换本标 签页的http/https状态,并且会记住你的选择...

leehorsley
2013/01/26
1K
0
WebUI自动化测试框架--Dagger

Dagger是网易杭州研究院QA团队开发的一个轻量级、运行稳定的WebUI自动化测试框架,主要基于Selenium及TestNg可以认为是对Selenium进行二次封装的一个框架(俗称 造轮子 )。之所以把这个轮子...

ChenKan
2013/03/05
2.8W
6

没有更多内容

加载失败,请刷新页面

加载更多

Subversion存储库中“分支”,“标记”和“主干”的含义是什么?

问题: I've seen these words a lot around Subversion (and I guess general repository) discussions. 我已经在Subversion(我猜通用存储库)讨论中看到了很多这样的话。 I have been us......

富含淀粉
今天
5
0
《Java8实战》笔记(03):Lambda表达式

本文源码 Lambda 管中窥豹 可以把Lambda表达式理解为简洁地表示可传递的匿名函数的一种方式:它没有名称,但它有参数列表、函数主体、返回类型,可能还有一个可以抛出的异常列表。 Lambda表达...

巨輪
今天
7
0
从其他文件夹导入文件 - Importing files from different folder

问题: I have the following folder structure. 我有以下文件夹结构。 application/app/folder/file.py and I want to import some functions from file.py in another Python file which r......

javail
今天
22
0
大数据研发学习之路--Hadoop集群搭建

阅读编译文档 准备一个hadoop源码包,我选择的hadoop版本是:hadoop-2.7.7-src.tar.gz,在hadoop-2.7.7的源码 包的根目录下有一个文档叫做BUILDING.txt,这其中说明了编译hadoop所需要的一些...

DSJ-shitou
今天
8
0
OSChina 周五乱弹 —— 特么是别的公司派来的特洛伊木马吧?

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 小小编辑推荐:《我会守在这里》- 毛不易 《我会守在这里》- 毛不易 手机党少年们想听歌,请使劲儿戳(这里) @FalconChen :股市连跪了五天,...

小小编辑
今天
77
2

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部