我正在创建一个Chrome扩展程序,该程序在Udemy课程页面上会检查所有视频,因此证书将变为可用,但是我遇到了一个问题,即我需要激活所有必需按钮上的click事件,但这发生的速度如此之快,以至于我的控制台被net :: ERR_INSUFFICIENT_RESOURCES淹没了,所有按钮中只有一半被单击并将POST请求发送到Udemy服务器。现在我正在寻找sleep()函数,谷歌搜索告诉我javascript中没有一个。
这是我正在使用的代码。
function clickButtons() {
var buttons = document.getElementsByClassName("curriculum-item--progress--3eKMJ btn btn-default")
for (i = 0; i < buttons.length; i++) {
clickButton(buttons, i)
}
}
function clickButton(buttonsArray, index){
buttonsArray[index].click();
}
clickButtons();
如果还有另一种方法可以解决此问题,也将不胜感激。
答案 0 :(得分:1)
您可以使用var a1 = "abc"
let a2: String? = "d"
let a3: String? = nil
let a4: [Character]? = ["e","f"]
a1 + a2 + a3 + a4 // "abcdef"
a1 + a2
print("a1:", a1)
a1 += a2
print("a1:", a1)
a1 + a3
print("a1:", a1)
a1 += a3
print("a1:", a1)
a1 + a4
print("a1:", a1)
a1 += a4
print("a1:", a1)
a1.append(contentsOf: ["e","f","g"])
print("a1:", a1)
a1.append(contentsOf: "hijkl")
print("a1:", a1)
和aync
创建延迟方法:
await
但是,话虽这么说,我认为最好是制定某种回调来触发另一个按钮单击,然后触发下一个等等。
答案 1 :(得分:0)
有一种解决方法/替代方法。在您的clickButtons()函数中,可以使用setTimeout()封装对clickButton的调用。像这样:
public interface YourOptions extends PipelineOptions {
@Description("Your option")
@Default.String("Hello World!")
ValueProvider<String> getStringValue();
void setStringValue(ValueProvider<String> value);
}
public static void main(String[] args) {
// Create pipeline
YourOptions options = PipelineOptionsFactory.fromArgs(args).withValidation()
.as(YourOptions.class);
Pipeline p = Pipeline.create(options);
// Branch for pushing the Value Provider value
p.apply(Create.of(1)).apply(ParDo.of(new DoFn<Integer, Integer>() {
@ProcessElement public void process(ProcessContext c) {
YourOptions ops = c.getPipelineOptions().as(YourOptions.class);
// Do something like push to DB here....
LOG.info("Option StringValue was {}" , ops.getStringValue());
}
}));
// The main pipeline....
p.apply(Create.of(1,2,3,4)).apply(Sum.integersGlobally());
p.run();
}
这将使您的循环中的每个呼叫延迟您设置的超时时间。