2016-06-27 154 views
1

我想在搜索后输入一些字符串后,从google获得搜索结果。我如何使用Selenium做到这一点?到目前为止,我设法创造了这个:从谷歌搜索页面获取所有搜索结果

WebDriver driver = new ChromeDriver(); 
     driver.get("http://www.google.com/xhtml"); 
     Thread.sleep(5000); 
     WebElement searchBox = driver.findElement(By.name("q")); 
     searchBox.sendKeys("ChromeDriver"); 
     searchBox.submit(); 

     System.out.println("Current Url: " + driver.getCurrentUrl()); 

     List<WebElement> results = driver.findElements(By.xpath("//h3[@class=r]/a")); 

     for(int i=0; i<results.size(); i++){ 
      System.out.println(">>>>> results " + results.get(i).getText()); 
     } 

     // second attempt 

     List<WebElement> allSearchResults = driver.findElements(By.cssSelector("ol li h3>a")); 

     //iterate the above list to get all the search titles & links from that page 
     for (WebElement eachResult : allSearchResults) 
     { 
      System.out.println("Title : " + eachResult.getText() + ", Link : " + eachResult.getAttribute("href")); 
     } 

我该如何解决这个问题?

回答

1

您需要wait for the results to appear

WebDriverWait wait = new WebDriverWait(webDriver, timeoutInSeconds); 
wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("h3.r a"))); 
+0

我应该在哪里放这段代码? –

+0

@PeterPenzov提交后和搜索链接之前。 – alecxe

+0

顺便问一下,你知道为什么第二个结果列表不起作用吗?我也想修复它。 –

0

您正在正确的轨道上。看来你的xpath是不正确的。你缺少的单引号旁边至R

List<WebElement> results = driver.findElements(By.xpath("//h3[@class=r]/a")); 

应提交搜索表单后

List<WebElement> results = driver.findElements(By.xpath("//h3[@class='r']/a")); 

screenshot of google search

+0

谢谢,但我再次得到空的结果。任何想法为什么? –