JavaScript实现模拟登录

来源网站:JavaScript实现模拟登录 – WhiteNight's Site

2023年6月1日

最近在搞爬取深圳技术大学的教务系统,搞定之后做个笔记。

实际上搞定模拟登录之后后面的就很简单了,只剩下爬课表和转json要处理。

前置准备与puppeteer

A high-level API to control headless Chrome over the DevTools Protocol

官方描述上面的英文就是,这里直接说该怎么用。

首先导入需要的npm包,然后准备好账号和密码,以及登录界面的Url。这里深圳技术大学教务系统的html为例。

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

const loginUrl = 'https://auth.sztu.edu.cn/idp/authcenter/ActionAuthChain?entityId=jiaowu';
const targetUrl = 'https://jwxt.sztu.edu.cn/jsxsd/framework/xsMain.htmlx';
const username = 'xxxxxxxxxxx'; 
const password = 'xxxxxxxxxxx'; 

准备好之后,通过puppeteer包中方法实现模拟浏览器和打开页面。由于像学校教务系统这些经常需要内网,挂着或者外网环境时通常无法访问。所以建议用try-catch接收异常方便后面调试。同时记得自己先尝试访问教务系统的登录界面,看看能不能打开再进行后续测试。

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

const loginUrl = 'https://auth.sztu.edu.cn/idp/authcenter/ActionAuthChain?entityId=jiaowu';
const targetUrl = 'https://jwxt.sztu.edu.cn/jsxsd/framework/xsMain.htmlx';
const username = 'xxxxxxxxxxx'; 
const password = 'xxxxxxxxxxx'; 

async function simulateLogin() {
    try {
        const browser = await puppeteer.launch();
        const page = await browser.newPage();

        await page.goto(loginUrl);

    } catch (error) {
        console.error('登录失败:', error);
    }
}

simulateLogin();

然后想想还需要些啥?模拟登录,说白了还是“登录”。

一般的登录流程:

  • 打开登录界面
  • 在指定的文本框中输入账号和密码
  • 点击登录按钮

更详细的登录流程:

  • 访问登录界面,根据html初始化页面
  • 在指定的文本框中输入账号和密码,输入完成后对当前网页的account和password赋值。
  • 点击登录按钮,触发响应事件,将account和password(password大部分都会加密,具体是DES还是md5需要去网页源码下找相关函数)传到数据库进行校验。

我们现在完成了第一步。接下来就是为当前网页的account和password赋值。

直接右键“检查”输入账号和密码的文本框,以深圳技术大学的教务系统为例

这里“检查”的是账号的输入框,可以发现它的nameh和id为”j_username”。有name或者id就好办了,直接检索当前页面各元素,然后给它赋值即可。密码同理,直接放上代码

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

const loginUrl = 'https://auth.sztu.edu.cn/idp/authcenter/ActionAuthChain?entityId=jiaowu';
const targetUrl = 'https://jwxt.sztu.edu.cn/jsxsd/framework/xsMain.htmlx';
const username = 'xxxxxxxxxxx'; 
const password = 'xxxxxxxxxxx'; 

async function simulateLogin() {
    try {
        const browser = await puppeteer.launch();
        const page = await browser.newPage();

        await page.goto(loginUrl);
 
        await page.type('input[name="j_username"]', username);
        await page.type('input[name="j_password"]', password);

    } catch (error) {
        console.error('登录失败:', error);
    }
}

simulateLogin();

模拟登录

探讨是否需要跳转网页

现在还差最后一步–模拟点击按钮。

但真的需要去“点击”按钮吗?很明显不需要。按钮只是为了触发响应事件做的,说明你并不需要去“点击”按钮,直接触发它的响应事件即可。

但是既然用了puppeteer包,那不如直接模拟点击按钮,明显省事的多。上面只是提供一种可行的思路,因为有些事件不是通过

你可能感兴趣的:(Javascript,javascript,开发语言,ecmascript)