尝试在 while 循环中延迟使用 setTimeout()
trying to delay using setTimeout() in a while loop
我基本上是在尝试为赌博网站制作自动化脚本。如果您了解轮盘赌游戏模式,您现在将有大约 20 秒的时间来选择颜色,并有 10 秒的时间让每一轮的结果出现。我想做的是为脚本制作一个 while 循环 运行 直到余额达到一定数量。我苦苦挣扎的是使用设置超时功能每 30 秒进行一次延迟,以便投注机器人可以在每一轮下注,基本上它会等待 30 秒,然后机器人下注。
示例:
do{
delay 30 seconds amount
run bot()
}while(condition)
当我尝试使用设置超时功能并使用网站上的脚本时,它开始无限下注,整个事情都崩溃了,因为延迟没有正确发生。
这是代码:
function Bot(bt, bc)
{
l = ((document.getElementsByClassName("roulette-past-queue--previous-rolls-container horizontal-scroll")[0].innerText).length);
f = document.getElementsByClassName("roulette-past-queue--previous-rolls-container horizontal-scroll")[0].innerText;
number = f[l - 1];
number = parseInt(number.replace(" ", ""));
if (number >= 1 && number <= 7)
{
LastResult = "red";
}
if (number >= 8 && number <= 14)
{
LastResult = "black";
}
if (number == 0)
{
LastResult = "green";
}
if (LastResult == bc)
{
if (bc == "red")
{
document.getElementById('bet-input-r').value = bt;
document.getElementById('roulette-btn-red').click();
}
else
{
document.getElementById('bet-input-r').value = bt;
document.getElementById('roulette-btn-black').click();
}
}
if (LastResult != bc)
{
if (bc == "red")
{
document.getElementById('bet-btn-double-r').click();
document.getElementById('roulette-btn-black').click();
bc = "black"
bt = bt * 2
}
else
{
document.getElementById('bet-btn-double-r').click();
document.getElementById('roulette-btn-red').click();
bc = "red"
bt = bt * 2
}
}
}
balance = document.getElementById('balance').innerHTML;
balance = parseInt(balance.replace(",", ""));
bet = 10
TargetBalance = 99988
document.getElementById('bet-input-r').value = bet;
betcolor = "black";
if (betcolor == "red")
{
document.getElementById('roulette-btn-red').click();
}
else
{
document.getElementById('roulette-btn-black').click();
}
//this is the looping part causing the problem i have deleted setTimout so you can see what i mean clearly
do
{
// 30 seconds delay
Bot(bet, betcolor)
}
while (balance < TargetBalance && balance > bet)
原则上至少有三种可能
- 使用
async/await
使周围的范围async
然后await
一个在给定时间段后解决的Promise
async fun doTheLoop() {
do {
await new Promise(res => setTimeout(res, 30000)); //the promise resolves after 30 seconds
Bot(bet, betcolor);
} while (balance < TargetBalance && balance > bet)
}
doTheLoop();
function callTheBot() {
Bot(bet, betcolor);
if (balance < TargetBalance && balance > bet)
setTimeout(callTheBot(), 30000);
}
setTimeout(callTheBot, 30000);
- 使用
setInterval()
并在不再满足条件时取消间隔
let interval = setInterval(() => {
if (balance < TargetBalance && balance > bet) {
Bot(bet, betcolor);
} else {
clearInterval(interval);
}
},30000);
这将是最简单的方法,但您必须删除循环,否则,您将收到 gazzilion 调用。在 Bot
函数的末尾添加此检查。
if(balance < TargetBalance && balance > bet) {
setTimeout(() => {
Bot(bet, betcolor)
}, 30000); // Expects ms, so 1000 * 30
}
还有另一种方法使用 async/await
。首先创建一个延时函数:
function delay(){
return new Promise((resolve) => {
setTimeout(() => resolve(), 1000)
});
}
然后,对其使用等待。请注意,要使用它,作用域必须是异步的。
async function main() {
for(let i = 0; i < 5; i++) {
console.log(i);
await delay();
}
}
我基本上是在尝试为赌博网站制作自动化脚本。如果您了解轮盘赌游戏模式,您现在将有大约 20 秒的时间来选择颜色,并有 10 秒的时间让每一轮的结果出现。我想做的是为脚本制作一个 while 循环 运行 直到余额达到一定数量。我苦苦挣扎的是使用设置超时功能每 30 秒进行一次延迟,以便投注机器人可以在每一轮下注,基本上它会等待 30 秒,然后机器人下注。 示例:
do{
delay 30 seconds amount
run bot()
}while(condition)
当我尝试使用设置超时功能并使用网站上的脚本时,它开始无限下注,整个事情都崩溃了,因为延迟没有正确发生。 这是代码:
function Bot(bt, bc)
{
l = ((document.getElementsByClassName("roulette-past-queue--previous-rolls-container horizontal-scroll")[0].innerText).length);
f = document.getElementsByClassName("roulette-past-queue--previous-rolls-container horizontal-scroll")[0].innerText;
number = f[l - 1];
number = parseInt(number.replace(" ", ""));
if (number >= 1 && number <= 7)
{
LastResult = "red";
}
if (number >= 8 && number <= 14)
{
LastResult = "black";
}
if (number == 0)
{
LastResult = "green";
}
if (LastResult == bc)
{
if (bc == "red")
{
document.getElementById('bet-input-r').value = bt;
document.getElementById('roulette-btn-red').click();
}
else
{
document.getElementById('bet-input-r').value = bt;
document.getElementById('roulette-btn-black').click();
}
}
if (LastResult != bc)
{
if (bc == "red")
{
document.getElementById('bet-btn-double-r').click();
document.getElementById('roulette-btn-black').click();
bc = "black"
bt = bt * 2
}
else
{
document.getElementById('bet-btn-double-r').click();
document.getElementById('roulette-btn-red').click();
bc = "red"
bt = bt * 2
}
}
}
balance = document.getElementById('balance').innerHTML;
balance = parseInt(balance.replace(",", ""));
bet = 10
TargetBalance = 99988
document.getElementById('bet-input-r').value = bet;
betcolor = "black";
if (betcolor == "red")
{
document.getElementById('roulette-btn-red').click();
}
else
{
document.getElementById('roulette-btn-black').click();
}
//this is the looping part causing the problem i have deleted setTimout so you can see what i mean clearly
do
{
// 30 seconds delay
Bot(bet, betcolor)
}
while (balance < TargetBalance && balance > bet)
原则上至少有三种可能
- 使用
async/await
使周围的范围async
然后await
一个在给定时间段后解决的Promise
async fun doTheLoop() {
do {
await new Promise(res => setTimeout(res, 30000)); //the promise resolves after 30 seconds
Bot(bet, betcolor);
} while (balance < TargetBalance && balance > bet)
}
doTheLoop();
function callTheBot() {
Bot(bet, betcolor);
if (balance < TargetBalance && balance > bet)
setTimeout(callTheBot(), 30000);
}
setTimeout(callTheBot, 30000);
- 使用
setInterval()
并在不再满足条件时取消间隔
let interval = setInterval(() => {
if (balance < TargetBalance && balance > bet) {
Bot(bet, betcolor);
} else {
clearInterval(interval);
}
},30000);
这将是最简单的方法,但您必须删除循环,否则,您将收到 gazzilion 调用。在 Bot
函数的末尾添加此检查。
if(balance < TargetBalance && balance > bet) {
setTimeout(() => {
Bot(bet, betcolor)
}, 30000); // Expects ms, so 1000 * 30
}
还有另一种方法使用 async/await
。首先创建一个延时函数:
function delay(){
return new Promise((resolve) => {
setTimeout(() => resolve(), 1000)
});
}
然后,对其使用等待。请注意,要使用它,作用域必须是异步的。
async function main() {
for(let i = 0; i < 5; i++) {
console.log(i);
await delay();
}
}