2014-05-21 48 views
0

我遇到以下問題:我使用的是與Java的selenium webdriver,並且想要提取網頁的所有鏈接。一些鏈接按需生成。這意味着在menulinks上的鼠標懸停會產生更多的鏈接。當我加載頁面時,這些鏈接不在那裏。使用Java的Mouseover Selenium

我試着先提取菜單導航鏈接,做一個mouseover,然後向驅動程序詢問「新」鏈接。但似乎沒有「新」的鏈接。

WebElement mainNavi = element.findElement(By.className("navigation")); 

Actions actions = new Actions(driver); 
List<WebElement> menuHoverLinks = new ArrayList<WebElement>(); 
menuHoverLinks.addAll(mainNavi.findElements(By.cssSelector("a"))); 

for (WebElement menuHoverLink : menuHoverLinks) { 
    Actions hoverOverRegistrar = actions.moveToElement(menuHoverLink); 
    hoverOverRegistrar.perform(); 
} 

第一:我的想法對嗎?是否有可能這樣做?如果是的話,我做錯了什麼?

在此先感謝!

回答

0

如果鏈接是動態生成的,那麼它們最初可能不存在。點擊菜單後,您應該使用Implicit Waits,以允許網頁在嘗試查詢新內容之前加載新內容。

而不是使用Actions,請考慮使用WebElement,它支持點擊。

例如,你可能會說

// do an implicit wait until the menu is fully loaded 
List<WebElement> elmts = driver.findElements(By.cssSelector("a")); 
for (WebElement elmt : elmts) { 
    elmt.click(); 
} 
+0

不幸的是,這仍然無法正常工作。 – cruxi

+0

但是,謝謝你的提示,所以這是正確的答案;) – cruxi

+0

考慮提出一個解決問題的答案。 – MxyL

0
private static String[] links = null; 
    private static int linksCount = 0; 
    public static void main(String[] args){ 

    driver.get("basic url"); 

    driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); 

    List<WebElement> all_link_webpage=driver.findElements(By.tagName("a")); 
    linksCount = all_link_webpage.size(); 
    System.out.println(linksCount); 
    links= new String[linksCount]; 
    for(int i=0;i<linksCount;i++) 
    { 
    links[i] = all_link_webpage.get(i).getAttribute("href"); 
    System.out.println(all_link_webpage.get(i).getAttribute("href")); 
    } 
    } 

這將幫助你做出在網頁上所有鏈接的數量,並打印在控制檯中的鏈接。我希望它可以幫助。此外我不確定鼠標懸停鏈接.. :)謝謝。

相關問題