2015-03-02 104 views
0

我试图点击给定网页的循环。一旦点击,我需要再次获取链接。我被困在必须从栈中弹出链接的地方。我将如何继续收集其他链接并删除重复内容?使用硒循环链接使用硒

public static void path(String url){ 
    WebDriver driver = new FirefoxDriver(); 
    driver.get(url); 
    Deque<String> stack = new ArrayDeque<String>(); 
    boolean goal = true; 
    while(!goal){ 
     for(WebElement links: driver.findElements(By.tagName("a"))){ 
      System.out.println(links.getAttribute("href")); 
      stack.push(links.getAttribute("href")); 
     } 
     for(int i = 0; i < stack.size();i++){ 
      if(stack.)// remove duplicates ???????? 
      driver.get(stack.pop()); 
      i++; 
     } 

    } 
} 

HTML

<div id="menunav"> 
    <ul> 
    <li><a href="index.php"><span>Home</span></a></li> 
    <li><a href="chinese_menu.php"><span>Menu</span></a></li> 
    <li><a href="chinese_food_catering.php"><span>Catering</span></a></li> 
    <li><a href="restaurant_events.php"><span>Events</span></a></li> 
    <li><a href="gallery.php"><span>Gallery</span></a></li> 
    <li><a href="contact.php"><span>Contact</span></a></li> 
    </ul> 
</div> 
+1

可以向我们展示你的HTML。我认为应该有一些属性可能会改变一旦你点击链接。这样你可以再次获取所有的链接,而没有那个属性改变 – 2015-03-02 06:09:07

+0

所以我应该使用不同的类方法?前进和后退导航属性如何“改变”? – user4073939 2015-03-02 06:35:50

+0

你可以检查链接被点击后改变的任何css属性。例如:让一个链接被点击后让“x”css属性改变它的颜色(因为几乎所有在google搜索中改变为红色的链接都会发生)。那么在XPath或CSS定位器条件中,您可以指定获取CSS属性未更改的所有链接。 – 2015-03-02 08:22:10

回答

0

IMHO,这段代码以上有点不好-understanable代码提供。 我会建议简单的列表进行操作:

List<WebElement> links = driver.findelements(By.cssSelector("a[href]")); 

这样你会得到所有HREF属性的链接。

您可以遍历列表和元素进行操作:

for(int i =0; i< links.size(); i++) 
{ 
    links.get(i).click(); 
// and|or get text:  
// links.get(i).getText(); 
} 

,使其为你工作(根据问题的描述),你应该用while和布尔条件标志包装这个:

bool condition=true; 
while(condition) 
{ 
    links = driver.findelements(By.cssSelector("a[href]")); 
    for(int i =0; i< links.size(); i++) 
    { 
     links.get(i).click(); 
    // and|or get text:  
    // links.get(i).getText(); 
    if(..analysis for condition goes here...) { 
      condition=false; 
       } 
    } 

} 
+0

感谢您的帮助,但是一旦第二个页面加载到for循环中,我会得到一个陈旧的元素引用异常 – user4073939 2015-03-03 00:13:27