模拟点击事件每次延时5秒钟
想让模拟点击事件每次延时5秒钟,可是没有反应function monitorDomChange() {
randomChars.forEach(function(value) {
console.log(value);
// 模拟点击事件
if (value) {
setTimeout(() => {
// 在这里执行您想要的操作
const event = new MouseEvent('click', {
bubbles: true,
cancelable: true,
view: unsafeWindow,
});
value.dispatchEvent(event);
}, 5000);
//setInterval( value.dispatchEvent(event), 5000);
//debugger
const targetDivSelector = '#endText';
const targetDiv = document.querySelector(targetDivSelector);
if (targetDiv) {
console.log('发现div:', targetDiv);
// 在这里可以对目标div进行操作或获取需要的数据
} else {
console.log('没有发现div');
}
}
}
);
} tansuo 发表于 2023-11-11 10:00
> (forum.php?mod=redirect&goto=findpost&pid=72048&ptid=5333)
...
把你的点击操作等代码写在 do something 那里,不要改前面的东西,前面代码的作用就是暂停5秒,类似其他语言里的sleep。 [油猴脚本开发指南]包装异步代码为同步代码
https://bbs.tampermonkey.net.cn/thread-883-1-1.html async function monitorDomChange() {
// 不要用forEach
for (const value of randomChars) {
console.log(value);
await new Promise(r => setTimeout(r, 5000));
// do something
}
} 本帖最后由 tansuo 于 2023-11-11 18:22 编辑
> (forum.php?mod=redirect&goto=findpost&pid=72048&ptid=5333)
> >
大佬,我的代码现在实现延迟模拟点击5秒了,但是只实现模拟点击一次,console.log('发现div:', targetDiv);没有打印,debugger调试后 到await new Promise(resolver => setTimeout(() => {这里就停了
async function monitorDomChange() {
for (const value of randomChars) {
console.log(value);
//debugger
// 模拟点击事件
if (value) {
await new Promise(resolver => setTimeout(() => {
// 在这里执行您想要的操作
const event = new MouseEvent('click', {
bubbles: true,
cancelable: true,
view: unsafeWindow,
});
value.dispatchEvent(event);
}, 5000));
const targetDivSelector = '#endText';
const targetDiv = document.querySelector(targetDivSelector);
if (targetDiv) {
console.log('发现div:', targetDiv);
// 在这里可以对目标div进行操作或获取需要的数据
} else {
console.log('没有发现div');
}
}
}
}
李恒道 发表于 2023-11-10 20:29
[油猴脚本开发指南]包装异步代码为同步代码
https://bbs.tampermonkey.net.cn/thread-883-1-1.html ...
大神,看看我回cxxjackie大神的帖子,使用有什么问题 tansuo 发表于 2023-11-11 19:00
大神,看看我回cxxjackie大神的帖子,使用有什么问题
c大给的是例子
跟之前你开的那个帖子一个问题
你不理解自己的业务需求
别人很难直接搞同步异步问题
容易出现自己不理解自己代码,但是又没法改
还是认真学学吧
感觉完全没静下心读资料...
跟上个问题几乎一模一样 本帖最后由 granded 于 2023-11-11 21:04 编辑
resolve没回调不是一直卡吗?不懂 granded 发表于 2023-11-11 20:58
resolve没回调不是一直卡吗?不懂
没有回调是什么意思? cxxjackie 发表于 2023-11-10 18:13
把你的点击操作等代码写在 do something 那里,不要改前面的东西,前面代码的作用就是暂停5秒,类似其他 ...
大神目前是可以实现每隔5秒实现模拟点击一次,但奇怪的是最后一次循环打印console.log('发现div:', targetDiv);时所有打印的值变成一样内容,前几个值以前是不一样的。而且我把打印的值targetDiv传给const targetDivValues = [];在保存html时最后获取的targetDiv没有保存,但value保存到html里了,下面是代码
var randomChars = [];
let title;
// 创建一个空数组用于存储targetDiv的值
const targetDivValues = [];
async function monitorDomChange() {
// 不要用forEach
for (const value of randomChars) {
console.log(value);
await new Promise(r => setTimeout(r, 10000));
// do something
if (value) {
// 在这里执行您想要的操作
const event = new MouseEvent('click', {
bubbles: true,
cancelable: true,
view: unsafeWindow,
});
value.dispatchEvent(event);
}
//debugger
const targetDivSelector = '#endText';
const targetDiv = document.querySelector(targetDivSelector);
if (targetDiv) {
console.log('发现div:', targetDiv);
// 将targetDiv的值保存在存储器中
targetDivValues.push(targetDiv.innerHTML);
targetDivValues.push(value.innerHTML);
} else {
console.log('没有发现div');
}
}
// 将存储器数据保存为HTML文件
await new Promise(r => setTimeout(r, 20000));
const htmlContent =targetDivValues.map(value => value.replace(/&draft=0&type=norm&pm=y/g, '').replace(/&draft=0&type=norm&actID=0/g, '')).join('');
const blob = new Blob(, { type: 'text/html' });
const url = URL.createObjectURL(blob);
const link = document.createElement('a');
link.href = url;
console.log('书名1111',title);
link.download = `${title}.html`;
link.click();
}
页:
[1]
2