const puppeteer = require('puppeteer'); const cheerio = require('cheerio'); const credentials = require('./credentials'); function send (shuoshuo, photos) { return new Promise(async (resolve, reject) => { const timeout = function (delay) { return new Promise((resolve, reject) => { setTimeout(() => { try { resolve(1) } catch (e) { reject(0) } }, delay); }) } const browser = await puppeteer.launch({args: ['--no-sandbox'],headless: false}); const page = await browser.newPage(); // 设置宽高 await page.setViewport({ height: 736, width: 414 }); // 设置UA await page.setUserAgent('Mozilla/5.0 (Linux; U; Android 4.0.3; ko-kr; LG-L160L Build/IML74K) AppleWebkit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30'); // 设置拦截器,在无头浏览器内运行时不加载图片和视频资源 await page.setRequestInterception(true); page.on('request', interceptedRequest => { if (interceptedRequest.resourceType() === 'image' || interceptedRequest.resourceType() === 'media') { interceptedRequest.respond({ status: 200, contentType: 'image/gif', body: Buffer.from('R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs=', 'base64') }) } else { interceptedRequest.continue(); } }); await page.goto('https://ui.ptlogin2.qq.com/cgi-bin/login?pt_hide_ad=1&style=9&appid=549000929&pt_no_auth=1&pt_wxtest=1&daid=5&s_url=https%3A%2F%2Fh5.qzone.qq.com%2Fmqzone%2Findex'); try { await page.type('#u', 'testqq', { delay: 100 }); await page.type('#p', 'testqq@2016', { delay: 100 }); await page.tap('#go'); await timeout(5000); let loginStatus = await page.content(); let $ = cheerio.load(loginStatus); if($('#feed_list_cot_all > .feed').length){ console.log('登陆成功'); }else{ console.log('登陆失败'); reject('登陆失败'); return false; } await page.tap('#page-content .tweet-txt button'); await timeout(1000); await page.type('.write-text.J_textareaWrapper textarea', shuoshuo); // 如果有图片 if (photos.length) { // 上传高清图片 await page.tap('.ui-switch'); const input = await page.$('#addphoto'); // 最多只能上传9张照片 if (photos.length > 9) { photos.splice(0, 9) } await input.uploadFile(...photos); await timeout(photos.length * 3000); } await page.click('#form-0-submit'); let time = 0; let verifySS = setInterval(async () => { let html = await page.content(); if(html.indexOf('说说发表成功') !== -1){ clearInterval(verifySS); await browser.close(); resolve(); }else{ if(time>60){ clearInterval(verifySS); await browser.close(); reject('说说发送超时'); return false; }else{ time++; } } }, 1000) } catch (error) { console.log(error.stack) await browser.close(); reject(error); } }) } send('测试说说', []) .then(() => { console.log('发送成功'); }) .catch(err => { console.log(err); })
QQ zone js publish
73 min read