【发布时间】:2019-03-20 20:06:02
【问题描述】:
我想在线程中的 for 循环内运行代码,因为它几乎会执行相同的操作,但针对不同的页面(使用 selenium webdriver)。我的问题是,我的计数器变量不能增加,因为它必须是最终的......
这是我的测试代码,但变量“tabCount”始终保持 i 计数。
// scrape over all tabs and get data in threads
for (int i = 0; i < tabs.size(); i++) {
final int tabCount = i;
Runnable r = () -> {
webDriver.switchTo().window(tabs.get(tabCount));
System.out.println(webDriver.getTitle());
};
threadPool.execute(r);
}
threadPool.shutdown();
try {
threadPool.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
} catch (InterruptedException e) {
e.printStackTrace();
}
谁能帮我在我的 chromedriver 的每个选项卡中并行执行相同的操作?
【问题讨论】:
-
您可以将计数器包装到一个数组中以使其保持可变,但使用
AtomicInt会更简单。但。 WebDriver 是有状态的,不是为多线程使用而设计的。每个线程实例化 WebDriver(从而启动浏览器实例)会更安全。 -
只是想知道:您没有在这里接受答案的具体原因是什么?
标签: java selenium for-loop web-scraping selenium-chromedriver