2016-04-22 155 views
0

我想獲取selenium webdriver中維基百科主頁的鏈接名稱。在主頁的底部有一個表格,其中包含維基百科姊妹項目的鏈接,如媒體維基,元維基等。但運行代碼後,我得到了24個鏈接。但在網頁上只有12個鏈接。我的懷疑是它也在拍攝圖像的鏈接。如何區分selenium webdriver中的圖像鏈接和href鏈接?

包tcsWebmail;

import java.io.File; 
import java.util.List; 
import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.firefox.FirefoxDriver; 

public class WikiPediaLinks { 

public static void main(String[] args) { 
WebDriver driver = new FirefoxDriver(); 
driver.get("https://en.wikipedia.org/wiki/Main_Page"); 
System.out.println(driver.getTitle()); 

WebElement Block=driver.findElement(By.xpath("//*[@id='mp-sister']/table//a[not(img)]")); 

List<WebElement> Links= Block.findElements((By.tagName("a"))); 
System.out.println("Printing the no of items in block"); 
int i=0; 
for (i=0;i<Links.size();i++){ 
System.out.println(Links.get(i).getText()); 
} 
System.out.println("The no of items are"+Links.size()); 
driver.quit(); 
} 
} 
+0

你忘記你的代碼:_D – fabersky

+0

@fabesky我剛剛添加。以前無法添加格式問題。 –

回答

0

您的XPath包含您懷疑的圖像。爲了得到a不包含後代img,你可以使用下面的XPath:

//*[@id='mp-sister']/table//a[not(img)] 

//*[@id='mp-sister']/table//a[not(descendant::*[local-name() = 'img'])] 
下面

見代碼:

List<WebElement> Links= driver.findElements(By.xpath("//*[@id='mp-sister']/table//a[not(img)]")); 
+0

謝謝@Buaban的答案。但在使用你提到的兩個xpath後,列表返回的項目數量爲0. –

+0

@amlandey你能用最新的代碼更新這個問題嗎?我確定我的Xpath是正確的,所以問題可能在另一行。 – Buaban

+0

@amlandey我已將代碼添加到我的答案中。您無需獲取Block,只需一次獲取鏈接。 – Buaban

0
In for loop put another condition to check to validate imgage (img) or link (href) 

List<WebElement> Links= Block.findElements((By.tagName("a"))); 
System.out.println("Printing the no of items in block"); 
for (int i=0;i<Links.size();i++) 
{ 
if(Links.get(i).getAttribute("href").contains("http://") 
{System.out.println(Links.get(i).getText()); 
} 
driver.quit(); 
} 
}