playwright


安装

使用npm或Yarn在Node.js项目中安装Playwright。需要Node.js 10或更高版本。

npm i playwright --save

注意:貌似不能使用全局安装,只能在相应的项目下安装,--save是为了在packagejson里面注册这个安装包。在安装过程中,Playwright将下载ChromiumFirefoxWebKit的浏览器二进制文件。

用法

一旦安装,你可以require playwrightNode.js,并启动任何3个浏览器(chromiumfirefoxwebkit)。


const { chromium } = require('playwright');

(async () => {
  const browser = await chromium.launch();
  // Create pages, interact with UI elements, assert values
  await browser.close();
})();

async关键字,将关键字放在函数声明的前面,以将其转换为异步函数。异步函数是一种知道如何预期await使用关键字调用异步代码的可能性的函数.

async function hello() { return "Hello" };
hello();

调用该函数将返回一个Promise。这是异步函数的特征之一-确保将它们的返回值转换为Promise。将async关键字添加到函数中以告诉它们返回promise,而不是直接返回值.

async函数与await关键字结合使用时,它的真正优势就显而易见了-实际上,它await仅在async函数内部起作用。可以将其放在任何基于异步基于Promise的函数的前面,以在该行上暂停代码,直到实现Promise,然后返回结果值。同时,可能正在等待执行机会的其他代码也会这样做。

脚本示例

实现自动发微博功能

此代码示例片段只实现了最简单的发微博功能,并未有错误处理等相关内容.

const { chromium } = require('playwright');
const readline = require('readline');        #输入输出,手机收到验证码后,输入验证码,根据输入的验证码填入界面对应的地方

const rl = readline.createInterface({       
    input: process.stdin,
    output: process.stdout
})

class Ut {
    /**
    * 异步延迟
    * @param {number} time 延迟的时间,单位毫秒
    */
    static sleep(time = 0) {
        return new Promise((resolve, reject) => {
            setTimeout(() => {
                resolve();
            }, time);
        })
    };
}


(async () => {
    const browser = await chromium.launch({ headless: false });
    const page = await browser.newPage();
    await Ut.sleep(5000);
    await page.goto('http://www.weibo.com');
    await Ut.sleep(8000);
    await page.fill('#loginname', '<name>');
    await page.fill('input[name=password]', '<password>');
    await Ut.sleep(3000);
    await page.click('div.login_btn');
    await Ut.sleep(8000);
    await page.click('#message_sms_login');
    await Ut.sleep(5000);

    var answer;
    rl.question("请输入验证码:\n", async (input) => {
        answer = input;
        console.log(answer);

        await page.fill('div.clearfix input:first-child', answer[0]);
        await page.fill('div.clearfix input:nth-child(2)', answer[1]);
        await page.fill('div.clearfix input:nth-child(3)', answer[2]);
        await page.fill('div.clearfix input:nth-child(4)', answer[3]);
        await page.fill('div.clearfix input:nth-child(5)', answer[4]);
        await page.fill('div.clearfix input:last-child', answer[5]);
        await page.click('#message_confirm');

        // await page.screenshot({ path: `weather.png` });
        await page.fill('textarea.W_input', process.argv[2]);
        await page.click('a.W_btn_a');
        await console.log('操作结束')


    })

})();

启动代码 node filename 'weibocontent'


文章作者: douma
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 douma !
评论
 上一篇
iterm快捷键使用 iterm快捷键使用
光标控制ctrl + a: 到行首ctrl + e: 行末ctrl + f/b: 前进后退,相当于左右方向键,但是显然比移开手按方向键更慢ctrl + p: 上一条命令,相当于方向键上ctrl + r: 搜索命令历史,这个大家都应该很熟悉了
2020-09-03 douma
下一篇 
javascript.file javascript.file
简述在HTML表单中,可以上传文件的唯一控件就是<input type="file">。 注意:当一个表单包含<input type="file">时,表单的enctype必须指定为 multipart/fo
2020-06-05 douma
  目录