【发布时间】:2018-03-04 06:29:22
【问题描述】:
我一直在尝试编写一个简单的代码来从 www.whoscored.com 抓取一些基本统计数据。 我的代码循环通过首页链接并抓取数据就好了,但是当我使用 driver.findElement(By.xpath("")).click(); 切换时到下一个表,它从第一个游戏收集数据,然后在第一个表/页面上继续循环/返回...
代码如下:
package Whoscored;
import java.io.File;
public class Datascrape {
public static void main(String[] args) throws InterruptedException,
IOException {
WebDriver driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS)
// get the URL
driver.get("https://www.whoscored.com/Regions/81/Tournaments/6/Seasons/6393/Germany-Bundesliga-II");
Thread.sleep(1000);
driver.manage().window().maximize();
// first loop to identify matches-list over and over again
for (int w=0;w<=100;w++){
List<WebElement> lista1 =
driver.findElements(By.cssSelector(".match-link.match-report.rc"));
// second loop for each table
for (int j=0;j<=lista1.size(); j++){
lista1.get(j).click();
driver.manage().window().maximize();
// go deeper (two clicks), grab stats and return to original position/table
// clicks
driver.findElement(By.xpath(".//*[@id='sub-
navigation']/ul/li[4]/a")).click();
driver.findElement(By.xpath(".//*[@id='live-match-
options']/li[3]")).click();
// grab stats/text
String home6 = driver.findElement(By.xpath(".//*
[@id='chalkboard']/div[2]/div[1]/div[3]/div[2]/span[1]")).getText();
String away6 = driver.findElement(By.xpath(".//*
[@id='chalkboard']/div[2]/div[1]/div[3]/div[2]/span[2]")).getText();
driver.navigate().back();
Thread.sleep(5000);
driver.navigate().back();
Thread.sleep(5000);
lista1= driver.findElements(By.cssSelector(".match-link.match-
report.rc"));
}
// after it finishes with first table go to second table with click
driver.findElement(By.xpath(".//*[@id='date-
controller']/a[1]/span")).click();
Thread.sleep(5000);
}
}
}
【问题讨论】:
-
您指的是下一张表吗?如果能提供截图就更好了
-
我在考虑上/下一个(在这种情况下是上一个)周比赛的表格。
-
下一页可能是更好的表达方式。我添加了一个屏幕截图。
-
使用带有明确等待日期更改的预期条件。
-
你能发布一些示例代码吗?