准备工作
需要一个能转发多次微博的账户,普通账户只能转发同一条微博几次,且有封号风险,具体怎么让账户能转发多条微博网上有方法教学。
脚本实现及原理
在网上有很多JavaScript脚本实现微博转发的脚本文章,通过发送post请求来实现快速多次转发,如下所示,转发微博时会向服务器发送名为normal_repost的请求,通过脚本发送表单数据来转发微博
但是这种方法我写的脚本始终收到服务器的403回复,不停的改还是没能找到解决办法。想着可以试着换个方法,按照我之前用py脚本的方法来实现转发,模拟鼠标点击实现自动转发微博。运行该脚本需要修改下面中文显示的几个地方。
function sleep(delay) {
return new Promise((resolve) => setTimeout(resolve, delay)); //时间休眠sleep函数
}
//转发函数(async为异步函数)
async function test(count) {
document.evaluate('第一个按钮的XPath路径',document.body,null,9,null).singleNodeValue.click(); //点击转发图标,并把XPath路径替换为你要转发的微博的转发图标的XPath路径
await sleep(500);//休眠0.5秒
document.evaluate('第二个按钮的XPath路径',document.body,null,9,null).singleNodeValue.click(); //点击转发按钮,替换XPath路径
await sleep(300);
t=document.getElementsByClassName('输入内容文本框的class名称')[0];
evt = document.createEvent('HTMLEvents');
evt.initEvent('input', true, true); //向文本框输入内容
t.value= count;
t.dispatchEvent(evt);
await sleep(500);
document.evaluate('最后一个按钮的XPath路径',document.body,null,9,null).singleNodeValue.click(); //点击最后转发,替换XPath路径
await sleep(500);
document.evaluate('第一个按钮的XPath路径',document.body,null,9,null).singleNodeValue.click(); //最后要再点击转发图标,回到最初界面,进行下一次转发
await sleep(500);
}
async function main() {
var count = 1000;
for (var i = 0; i < 10; i++) {
count++;
await Promise.all([test(count)]); //将 sleep 函数和 DOM 操作的 Promise 包装在一个 await Promise.all([...]) 中,以确保所有异步操作都在并行执行后,才会进入下一次循环迭代。这样可以避免异步问题。
}
}
main();
手动转发时需要点击下面三个键以及输入内容的对话框。
我们通过F12打开浏览器开发者工具定位这三个键的XPath路径和输入内容框的class名称,然后将得到的内容按顺序放入代码中,修改好就可以直接在浏览器控制台运行了。转发的内容为count设置的内容,我设置的是数字,每次转发加一保证转发内容不一致,也可以设置成任意字符串。运行脚本时候滑动界面和将运行界面最小化或者切换到其他浏览器标签都会对脚本运行有影响,如果要多个窗口同时运行可以将窗口缩小始终放在最前面。