自从上次写了手机QQ频道自动发私信的功能后,私信找我的人不少,不过也提出了一些新的需求,其中就有一个很实现的功能,就是想把自已的频道全自动的分享出去,到其它的聊天室里,这样就能极大的曝光自已的频道,手工发当然可以,但做营销的,一个Q几十个频道,一个一个发,还想要24小时不停发,那就有难度了,还是得上工具。
想要实现这个功能,首先就得解决以下两个问题
1.怎么按顺序实现所有频道全部发到
2.发频道不能够重复
3.怎么实现24小时不停发送,无需人工干预
第一个问题,按顺序发就得先采集到所有的频道,这里可以用到一个数组做为存储,每次发之前,都采集一次一个Q的所有频道名称,放进这个list里。
第二个问题,就很好解决了,每一次发完一个频道就从List里删一条。第三个问题,可以设定一个间隔时间,所有频道发完后停止多少分钟后,再发。
上代码:
function run()
{
start(true);//采集
randomsleep2(2,3);
// log(collectionlist);
//2.发送
while (collectionlist.length > 0) {
// 取出第一个元素
let item = collectionlist[0];
log("取出的元素: " + item);
start(false,item);//开始执行
// 从列表中删除该元素
collectionlist.shift();
randomsleep2(2,3)
}
id("ivTitleBtnLeft").findOne().click();//发送完就结束,让下一次采集用
randomsleep2(2,3);
//停止多长时间
randomsleep2(60,120);//一分钟到2分钟
}
function start(iscollection,item)
{
auto.waitFor();
app.launch("com.tencent.mobileqq");
waitForPackage("com.tencent.mobileqq");
toastLog("等待QQ启动完毕");
if (iscollection)
{
//打开一个置顶聊天框
id("nlv").findOne().children().forEach((child, index) => {
if (index === 1) { // 只处理第2条
try {
var target = child.findOne(className("android.widget.FrameLayout").depth(19));
click(target.bounds().centerX(), target.bounds().centerY());
randomsleep2(5,7);
} catch (err) {}
}
});
}
var targets = id("nlv").findOne().children().map(child => child.findOne(id("title"))).filter(target => target != null);
if (targets.length > 0)
{
var tmptarget = targets[targets.length - 3];//第三个
if (tmptarget != null)
{ // 判断 tmptarget 是否不为空
longClick(tmptarget.bounds().centerX(), tmptarget.bounds().centerY()); // 长按动作
}
}
randomsleep2(2,3);
click(165,380);//点分享
randomsleep2(1,3);
id("text1").className("android.widget.TextView").text("腾讯频道").findOne().parent().parent().click();
randomsleep2(1,3);
className("android.widget.Button").findOne().click();//多选
randomsleep2(1,3);
// 获取控件位置 ,滑动到obj1
if(className("android.widget.TextView").text("最近聊天").exists())
{
var obj1 = id("jq2").className("android.widget.TextView").text("最近聊天").findOne();
var obj2 = id("jq2").className("android.widget.TextView").text("全部频道").findOne();
// log(obj1);
if (!obj1)
{
swipe_downToUpobj(obj1,obj2);
}
}
if (iscollection)
{
collection2();//采集所有频道名称
className("android.widget.Button").text("取消").findOne().click();
randomsleep2(1,3);
className("android.widget.ImageView").desc("返回").findOne().click();
randomsleep2(1,3);
className("android.widget.Button").text("关闭").findOne().click();
randomsleep2(1,3);
return;
}
var allgroups = id("group_item_layout").find(); // 获取所有匹配的控件
}
function collection2()
{
while(true)
{
var firsttext;
var secondtext;
allgroups = id("group_item_layout").find();
for (let i = 0; i < allgroups.length; i++)
{
let group = allgroups[i];
let counts = group.childCount();
var childElements = group.children();
pindaoname = childElements[3].text();
log(pindaoname);
if (i==1)
{
firsttext=pindaoname;//滑动之前的文本
log("firsttext:"+firsttext);
}
if (!pindaoname.includes(" | ")) //过滤掉最近聊天的列表
{
if (!isColllist(pindaoname)) // 不在列表里
{
collectionlist.push(pindaoname); // 添加到发送列表
}
}
}
// swipeUp();//滑动
swipe(356,1168,565,408,622);
sleep(3000);
allgroups = id("group_item_layout").find();
for (let i = 0; i < allgroups.length; i++)
{
let group = allgroups[i];
let counts = group.childCount();
var childElements = group.children();
pindaoname = childElements[3].text();
log(pindaoname);
if (i==1)
{
secondtext=pindaoname;//滑动之前的文本
log("secondtext:"+secondtext);
}
if (!pindaoname.includes(" | ")) //过滤掉最近聊天的列表
{
if (!isColllist(pindaoname)) // 不在列表里
{
collectionlist.push(pindaoname); // 添加到发送列表
}
}
}
// exit();
if (secondtext==firsttext)
{
toastLog("已经到底了");
log(sendlists);
break;
}
}
}
//点其中一个
function loopit(allgroups,item)
{
let pindaoname = null; // 初始化返回值
let isfound=false;//是否找到发送
let counti=0;
while(true)
{
counti++;
if (counti>=60)//找不到了
{
break;
}
log("counti:"+counti);
var firsttext;
var secondtext;
// allgroups = id("group_item_layout").find();
// if (allgroups.length==0)
// {
// break;
// }
log("allgroups.length"+allgroups.length);
for (let i = 0; i < allgroups.length; i++)
{
let group = allgroups[i];
let counts = group.childCount();
var childElements = group.children();
if(childElements[3]==null)
{
log("没找到");
break;
}
pindaoname = childElements[3].text();
if (i==1)
{
firsttext=pindaoname;//滑动之前的文本
log("firsttext:"+firsttext);
}
log("pindaoname1:"+pindaoname);
log("item:"+item);
if (item==pindaoname)
{
shareit(childElements);//做分享动作
isfound=true;
break;
}
}
if (isfound)
{
log("isfound找到");
break;
}
log("向下滑动");
swipe(356,1168,565,408,622);
sleep(3000);
allgroups = id("group_item_layout").find();
for (let i = 0; i < allgroups.length; i++)
{
let group = allgroups[i];
let counts = group.childCount();
var childElements = group.children();
if(childElements[3]==null)
{
log("没找到");
break;
}
pindaoname = childElements[3].text();
if (i==1)
{
secondtext=pindaoname;//滑动之前的文本
log("secondtext:"+secondtext);
}
log("pindaoname1:"+pindaoname);
log("item:"+item);
if (item==pindaoname)
{
shareit(childElements);//做分享动作
isfound=true;
break;
}
}
if (isfound)
{
break;
}
if (secondtext==firsttext)
{
toastLog("已经到底了");
// log(sendlists);
break;
}
}
randomsleep2(3,5);
if(id("dialogRightBtn").exists())
{
//发送完 直接退到聊天界面
id("dialogRightBtn").findOne().click();//发送
randomsleep2(3,5);
}
else
{
//不正常返回,没找到元素
if(className("android.widget.ImageView").desc("返回").exists())
{
className("android.widget.ImageView").desc("返回").findOne().click();
randomsleep2(2,3);
if(className("android.widget.Button").text("关闭").exists())
{
className("android.widget.Button").text("关闭").findOne().click();
randomsleep2(2,3);
}
}
}
return pindaoname;
}
function isAtBottom(obj) {
// 获取屏幕高度
var screenHeight = device.height;
// 获取控件的底部坐标
var objBottom = obj.bounds().bottom;
// 判断控件是否在屏幕底部
return objBottom >= screenHeight - 200;
}
function handleScrollAfterClick(clickElement) {
// 获取初始滚动条高度
let initialScrollHeight = getScrollHeight(); // 实现该函数以返回滚动条高度
// 执行点击操作
click(clickElement.bounds().centerX(), clickElement.bounds().centerY());
randomsleep2(1, 3); // 等待操作完成
// 获取点击后的滚动条高度
let newScrollHeight = getScrollHeight(); // 再次获取滚动条高度
// 计算变长
let lengthChange = newScrollHeight - initialScrollHeight;
// 如果变长大于0,则向上滑动相应的距离
if (lengthChange > 0) {
log("滚动条变长了,变长的高度为: " + lengthChange);
// 向上滑动相应的高度
scrollUp(lengthChange);
} else {
log("滚动条没有变长。");
}
}
// 向上滑动的函数
function scrollUp(distance) {
// 实现具体的滑动逻辑
// 例如:使用一个滑动 API 或者模拟滑动
// swipe(321,1223,565,215,805);
startX=321;
startY=1223;
swipe(startX, startY, startX, startY - distance, 1000); // 根据需要调整参数
// swipe(startX, startY, startX, startY - distance, duration); // 根据需要调整参数
}
// 实现获取滚动条高度的函数
function getScrollHeight() {
// 根据具体情况获取滚动条高度
// 例如,通过获取某个元素的高度或坐标来实现
// return document.body.scrollHeight; // 示例:获取整个文档的滚动高度
return 1280;
}
QQ频道自动分享,直达聊天室,高效引流的方法
效果如下:点击打开
不懂的,或需要成品的可以私信我,不定时在线!
我的51cto早已经注销,请不要转载我发的内容!