簡體   English   中英

網址不變時,使用Java Selenium在多個頁面上抓取數據

[英]Using Java Selenium to scrape a data across multiple pages when the url doesn't change

在此處輸入圖片說明 我一直在嘗試編寫一個簡單的代碼,以從www.whoscored.com抓取一些基本統計信息。 我的代碼遍歷首頁鏈接並抓取數據很好,但是當我使用driver.findElement(By.xpath(“”))。click();切換時, 到下一張桌子,它從第一個游戲BUT收集數據,然后繼續在第一個桌子/頁面上循環/返回...

這是代碼:

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);
    }   
           }
}

閱讀文檔之前,您必須確保已加載數據。 例如你的電話

driver.findElement(By.xpath(".//*[@id='date-controller']a[1]/span")).click();

很好,但是您還需要確保下一個兄弟姐妹

driver.findElement(By.xpath(".//*[@id='date-controller']a[2]/span"))

已更改其值,例如,初始范圍包含“ 2017年1月23日至29日”,而onclick應更改為“ 2016年12月19日至25日”

單擊//*[@id="date-controller"]/a[3]/span您需要等待reload元素:

ExpectedConditions.stalenessOf(....))

如果您的程序越來越大,越來越復雜,則可以使用NoraUi

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM