利用puppeteer 公衆號自動導入回覆信息

準備工做

首先得申請一個微信公衆號,而後用瀏覽器登陸以後,來到關鍵詞回覆頁面。利用cookie獲取工具導出當前的cookie。javascript

image-20201029111954415

點擊導出當前domain的全部cookiehtml

image-20201029112051599

導出來的cookie是一個數組,直接複製到一個地方備用便可java

環境構建

使用全局代理,利用npm下載puppeteernode

npm i puppeteer@3.0.0

因爲下載puppeteer的時候會下載chromium,因此須要全局代理,不下載chromium也能夠直接下載puppeteer-corenpm

npm i puppeteer-core

整活

打開頁面
let browser = await puppeteer.launch(launchOptions);
let page = await browser.newPage();
for (let i = 0; i < cookies.length; i++) {
    await page.setCookie(cookies[i]);
}
await page.goto(url);
await page.waitForSelector('html');
await page.content();
let title = await page.title();
點擊添加回復
await page.$$eval('.weui-desktop-layout__extra', clickAddButton);
async function clickAddButton(nodes) {
    let cnt = 0;
    for (let node of nodes) {
        cnt++;
        if (cnt === 1) continue;
        let treeWalker = document.createTreeWalker(
            node,
            NodeFilter.SHOW_ELEMENT,
            {
                acceptNode: function (node2) {
                    return NodeFilter.FILTER_ACCEPT;
                }
            },
            false
        );
        while (treeWalker.nextNode()) {
            let current = treeWalker.currentNode;
            if (current.tagName.toLowerCase() === 'button' && current.innerHTML === '添加回復') {
                await current.click();
                return true;
            }
        }
    }
    return false;
}
填寫規則和匹配
await page.type('.weui-desktop-form__input', val.group + '', {delay: 100});
await page.waitFor(1000);
await page.type('[placeholder=輸入關鍵詞]', val.title.split('-')[0] + '', {delay: 100});
await page.waitFor(1000);

點擊添加文本回覆信息的按鈕

await page.$$eval('.weui-desktop-msg-sender__tab_text', addTxt);
async function addTxt(nodes) {
    for (let node of nodes) {
        await node.click();
        return true;
    }
    return false;
}
在內容區鍵入回覆內容
await page.focus('.edit_area');
await page.keyboard.type('aaa:' + val.title.split('-')[0].trim(), {delay: 100});
await page.keyboard.press('Enter');
await page.keyboard.type('bbb:' + val.title.split('-')[1].trim(), {delay: 100});
await page.keyboard.press('Enter');
await page.keyboard.type('ccc:' + val.url, {delay: 100});
await page.keyboard.press('Enter');
await page.keyboard.type('ddd:' + val.code, {delay: 100});
await page.keyboard.press('Enter');
await page.keyboard.type('eee:' + val.id, {delay: 100});
利用xpath點擊按鈕
await page.waitForXPath('//*[@id="app"]/div[3]/div[2]/div[2]/form/div[3]/div/div/div[3]/div[1]/div/div[3]/button[1]');
let elHandles = await page.$x('//*[@id="app"]/div[3]/div[2]/div[2]/form/div[3]/div/div/div[3]/div[1]/div/div[3]/button[1]');
for (let handle of elHandles) {
    handle.click({delay: 100});
}
利用xpath 點擊保存按鈕
await page.waitForXPath('//*[@id="app"]/div[3]/div[2]/div[2]/div/button[1]');
let elHandle1s = await page.$x('//*[@id="app"]/div[3]/div[2]/div[2]/div/button[1]');
for (let handle of elHandle1s) {
    handle.click({delay: 100});
}

就搞定了數組

炒雞辣雞原創文章,轉載請註明來源
相關文章
相關標籤/搜索