Web自动化

2018-06-26

实现Web自动化有很多方法,比如selenium,或者模拟图形化操作的xdotool:

http://git.malu.me/xdotool自动化工具笔记/

selenium

相对来说最成熟了,支持各大主流浏览器(需要webdriver支持)。

puppeteer

puppeteer是谷歌chrome团队出的支持chrome无头模式,可模拟移动端,node编写,语法精炼,性能强劲。

API文档:https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md

自动收取邮件示例:

const puppeteer = require('puppeteer');

// 注意该路径会和原始用户配置冲突,如果要用用户配置启动,请把开着的chrome先全部关闭
const user_data_path = String.raw`${process.env.LocalAppData}\Google\Chrome\User Data`;
const chrome_exe = String.raw`${process.env["ProgramFiles(x86)"]}\Google\Chrome\Application\chrome.exe`;

const autoSubmitForm = async (url) => {
    // 启动浏览器
    const browser = await puppeteer.launch({
        // 关闭无头模式,方便我们看到这个无头浏览器执行的过程
        headless: false,
		// 取消加载默认配置
		// ignoreDefaultArgs: true,
        // chrome 启动参数
        args: ['--no-sandbox'],
        // 显示chrome log信息和错误信息
        dumpio: true,
		userDataDir: user_data_path,  // 浏览器用户路径(可选)
		executablePath: chrome_exe,  //调用浏览器位置(可选)
    });

    // 打开页面
    const page = await browser.newPage();
    // 设置浏览器视窗
    page.setViewport({
        width: 1920,
        height: 1080,
    });
    // 地址栏输入网页地址
    await page.goto(url, {
        waitUntil: 'networkidle2', // 等待网络状态为空闲的时候才继续执行
    });

    // 点头像登录
    await page.mouse.click(1300,441);
    await page.waitFor(3000);
    // 点代收邮箱
    await page.mouse.click(80,376);
    await page.waitFor(2000);
    while (true) {
        // 点收取
        await page.mouse.click(265, 119);
        await page.waitFor(60000*5);
    }
};

if (require.main === module) {
    autoSubmitForm('http://mail.qq.com/cgi-bin/frame_html');
}

puppeteer 中启用扩展

默认情况下puppeteer关闭了扩展,具体代码在 node_modules\puppeteer\lib\Launcher.js

const DEFAULT_ARGS = [
'--disable-background-networking',
'--disable-background-timer-throttling',
'--disable-breakpad',
'--disable-client-side-phishing-detection',
'--disable-default-apps',
'--disable-dev-shm-usage',
'--disable-extensions',
....

我们可以在启动时关闭它:

ignoreDefaultArgs: true,