我正在使用Selenium开发Play商店的评论提取器。我的代码如下:
public void extract() {
ExecutorService executor = Executors.newFixedThreadPool(this.configurationManager.getNumberOfThreadToUse());
for (String currentApp : appsToMine) {
ArrayList<String> aux = new ArrayList<>();
aux.add(currentApp);
Crawler googlePlayStoreCrawler = CrawlerFactory.getCrawler(this.configurationManager, aux, "google");
executor.execute(googlePlayStoreCrawler);
}
executor.shutdown();
}
此处,Crawler
实施Runnable
。使用多个线程,每个人打开一个单独的Firefox实例,Selenium失败,因为网页不可见(它被另一个线程打开的新窗口隐藏)。所以,我试图在一次只有一个线程的情况下执行所有进程。
但是如果我使用ExecutorService
以1作为参数实例化newFixedThreadPool
,则新线程始终在前一个线程运行时启动。
答案 0 :(得分:2)
听起来你根本不需要使用线程。只需通过主线程运行爬虫:
for (String currentApp : appsToMine) {
ArrayList<String> aux = new ArrayList<>();
aux.add(currentApp);
Crawler googlePlayStoreCrawler = CrawlerFactory.getCrawler(this.configurationManager, aux, "google");
googlePlayStoreCrawler.run();
}