无法获得所有页面的链接 [英] Not able to get links of all the total pages

查看:99
本文介绍了无法获得所有页面的链接的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在Google中键入selenium,并将结果的所有标题文本保存在记事本文件中.我想获取所有页面上的所有可用链接,直到搜索的最后一页.但是我得到的只有第一页的链接.当我调试并运行时,它的工作时间约为10页.

JAVA代码:

public class weblink 
{
    public static void main(String[] args) throws IOException, InterruptedException {
    WebDriver driver;
    System.setProperty("webdriver.chrome.driver", "E:\\disha.shah/myWork/eclipse/chromedriver.exe");
    driver = new ChromeDriver();
    driver.manage().window().maximize();
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    driver.get("http://www.google.co.in/");
    driver.findElement(By.id("lst-ib")).sendKeys("Selenium");
    driver.findElement(By.id("_fZl")).click();

    PrintStream ps = new PrintStream(new File(("E:\\disha1.txt")));
    do
     {
        List<WebElement> findElements = driver.findElements(By.xpath("//*[@id='rso']//h3/a"));  
        for (WebElement webElement : findElements)      
        {
            System.out.println("-" + webElement.getText()); // for title
          //System.out.println(webElement.getAttribute("href")); // for links
            driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
            System.setOut(ps); 
            driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
        }   

        Thread.sleep(1000);


        if(driver.findElement(By.linkText("Next")).isDisplayed()== true)
        { 
            driver.findElement(By.linkText("Next")).click();     
        }
        else
        {   
            System.out.println("All Link is Covered");
        }


    }
    while(driver.findElement(By.linkText("Next")).isDisplayed() );
    {
        //Thread.sleep(2000);
    }


    }
 }

解决方案

我已经做了一些更正.更新的代码如下.-

public static void main(String[] args) throws IOException, InterruptedException 
{
    WebDriver driver;
    System.setProperty("webdriver.chrome.driver", "D:/Application/chromedriver.exe");
    driver = new ChromeDriver();
    driver.manage().window().maximize();
    driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
    driver.get("http://www.google.co.in/");

    driver.findElement(By.id("lst-ib")).sendKeys("Selenium");
    driver.findElement(By.id("_fZl")).click();
    Boolean nextButtonFlag = true;
    // Create two separate file storing the result
    PrintStream searchTitle = new PrintStream(new File(("D:\\Titles.txt")));
    PrintStream searchLink = new PrintStream(new File(("D:\\Links.txt")));
    do
     {
               List<WebElement> findElements = driver.findElements(By.xpath("//h3[@class='r']/a"));  
               for (WebElement element : findElements)
               {
                   // Write all received links and title inn txt file
                   searchTitle.append(element.getText()+"\n");
                   searchLink.append(element.getAttribute("href")+"\n");
               }   
                    Thread.sleep(2000);
               try
               {
                   driver.findElement(By.linkText("Next")).click();
                }
               catch(Exception e)
               {
                   //  no more next button to navigate further link
                   nextButtonFlag=false;
               }

               Thread.sleep(2500);
        }
        while(nextButtonFlag);

          System.out.println("Execution done");
          searchTitle.close();
          searchLink.close();
    }
 }

I'm trying to type selenium in google and get all the title text of result in a notepad file. i want to get all available links on all the pages, till last page of search. but only 1st page's link i am getting. when i debug and run, it is working for some 10 pages.help me in this.

JAVA code:

public class weblink 
{
    public static void main(String[] args) throws IOException, InterruptedException {
    WebDriver driver;
    System.setProperty("webdriver.chrome.driver", "E:\\disha.shah/myWork/eclipse/chromedriver.exe");
    driver = new ChromeDriver();
    driver.manage().window().maximize();
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    driver.get("http://www.google.co.in/");
    driver.findElement(By.id("lst-ib")).sendKeys("Selenium");
    driver.findElement(By.id("_fZl")).click();

    PrintStream ps = new PrintStream(new File(("E:\\disha1.txt")));
    do
     {
        List<WebElement> findElements = driver.findElements(By.xpath("//*[@id='rso']//h3/a"));  
        for (WebElement webElement : findElements)      
        {
            System.out.println("-" + webElement.getText()); // for title
          //System.out.println(webElement.getAttribute("href")); // for links
            driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
            System.setOut(ps); 
            driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
        }   

        Thread.sleep(1000);


        if(driver.findElement(By.linkText("Next")).isDisplayed()== true)
        { 
            driver.findElement(By.linkText("Next")).click();     
        }
        else
        {   
            System.out.println("All Link is Covered");
        }


    }
    while(driver.findElement(By.linkText("Next")).isDisplayed() );
    {
        //Thread.sleep(2000);
    }


    }
 }

解决方案

I've done some correction. the updated code is below.-

public static void main(String[] args) throws IOException, InterruptedException 
{
    WebDriver driver;
    System.setProperty("webdriver.chrome.driver", "D:/Application/chromedriver.exe");
    driver = new ChromeDriver();
    driver.manage().window().maximize();
    driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
    driver.get("http://www.google.co.in/");

    driver.findElement(By.id("lst-ib")).sendKeys("Selenium");
    driver.findElement(By.id("_fZl")).click();
    Boolean nextButtonFlag = true;
    // Create two separate file storing the result
    PrintStream searchTitle = new PrintStream(new File(("D:\\Titles.txt")));
    PrintStream searchLink = new PrintStream(new File(("D:\\Links.txt")));
    do
     {
               List<WebElement> findElements = driver.findElements(By.xpath("//h3[@class='r']/a"));  
               for (WebElement element : findElements)
               {
                   // Write all received links and title inn txt file
                   searchTitle.append(element.getText()+"\n");
                   searchLink.append(element.getAttribute("href")+"\n");
               }   
                    Thread.sleep(2000);
               try
               {
                   driver.findElement(By.linkText("Next")).click();
                }
               catch(Exception e)
               {
                   //  no more next button to navigate further link
                   nextButtonFlag=false;
               }

               Thread.sleep(2500);
        }
        while(nextButtonFlag);

          System.out.println("Execution done");
          searchTitle.close();
          searchLink.close();
    }
 }

这篇关于无法获得所有页面的链接的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆