当前位置: 首页 > 知识库问答 >
问题:

硒递归含量测试?

宇文智敏
2023-03-14

假设一个网站有以下结构

 Link1 -> Huge Sublinks (Example Link11, Link12,...) -> Link 11 -> Huge Sub 
 Links (Example Link 111, Link 112..... ) -> Link 111 -> Huge Sub Links 
 (Example Link 1111, Link 1112.....)

 Link2 -> Huge Sublinks (Example Link21, Link22,...) -> Link 21 -> Huge Sub 
 Links (Example Link 211, Link 212..... ) -> Link 211 -> Huge Sub Links 
 (Example Link 2111, Link 2112.....)

类似地,链接3,链接4

现在我需要遍历每个链接Link1,Link2,Link3,Link4来提取最后一页上没有后续链接递归存在的内容。

但目前递归不起作用,它抛出

org.openqa.selenium.StaleElementReferenceException: stale element reference: element is not attached to the page document

由于当前页面不同,无法保留旧元素信息,并且页面已移动到新页面,因此会引发错误。

递归搜索内容的最佳方法是什么???

示例代码段:

public static void visitChildPages(String webSite) {
    driver.get(webSite);
    List<WebElement> liElements =      
    driver.findElementsByClassName("company");
    for(WebElement liElement : liElements) {
        List<WebElement> childs = liElement.findElements(By.xpath(".//*"));
        for(WebElement childEl : childs) {
          link = childEl.getAttribute("href");
          if(StringUtils.isNotBlank(link) && link.contains("http")) {
                visitChildPages(link);
           } else { 
               WebElement todaysClimate = childEl.findElement(By.id("ceoName"));
            }
         }
     }
   }

共有2个答案

金昌胤
2023-03-14

最简单的方法是

  1. 创建带有当前url导航的哈希地图
  2. 最后迭代哈希映射并获取值。

每当url发生更改时,我们需要使用url创建hashmap。

假设我们必须从第一页导航10个URL,我们将有10个哈希映射。

它运行良好,但如果需要,需要尝试上述软件。

冯文彬
2023-03-14

看看你的情况,像可加载组件这样的模式可能只是一个临时解决方案。它保持跨所有Page对象的页面导航逻辑。

如果您只需要一些页面内容,您可以直接导航到页面URL。但这又是一个局部解决方案。

递归搜索内容的方法

可能是像Xenu这样的URL遍历工具和像JSoup这样的解析器的组合。您可以通过第一个链接导出找到和访问过的链接,并将收藏传递给第二个链接,这将在所有其他链接中验证您的确切页面。

 类似资料:
  • 递归互斥量(Recursive Mutexes)是互斥量的一个特例,与互斥量基本完全相同,除了: 递归互斥量可以由拥有者多次获取,但是也要求拥有者释放相同次数。比如,一个递归互斥量被获取了5次,那么同样需要释放5次。

  • 我需要刮http://www.vintagetoday.be/fr/montres但它有动态内容。 我该怎么做呢? 从bs4导入请求导入美丽汤t=requests.get("vintagetoday.be/fr/catalogue.awp"). text print(len(美丽汤(t,"lxml"). findAll("td",{"class":"Lien2"}))

  • 我对函数式编程很陌生,尤其是下面使用的Scheme。我正在尝试使以下函数是递归的,尾递归的。基本上,该函数的作用是对两个字符串的对齐方式进行评分。当给定两个字符串作为输入时,它会比较每个“列”字符,并根据在称为 scorer 的函数中实现的评分方案(由下面的代码中的函数调用)来累积该对齐的分数。 我有一个想法,用一个帮助函数来累积分数,但我不太确定如何去做,因此我该如何让下面的函数尾递归呢?

  • null null 对上述重试功能执行以下测试。 总是传递一个承诺进行解析,重试函数在第一次执行时解析/li> 我以为写这些开玩笑的时候会是这样的。 因此,它失败,出现以下错误。 我认为,这将是可以管理的设置在笑话关于这个错误。但是,从根本上说,我不知道如何在Jest中测试promise递归处理。

  • 我写了下面的代码来反转链表的前K个节点,它在反转链表的前K个节点时解决了一些问题,为什么递归在最后一次迭代中执行两次,现在它可以正常工作,但为什么它会导致链表中的循环当我尝试在“if”条件下使用变量“k”而不是“PresCouner”时,原因是什么?以及如何避免它?

  • 对于二进制搜索树,我只能访问根节点,而我正在尝试编写一个递归方法来挖掘其左节点。 例如 root.left(); 成为 根左()。左(); 然后, 根左()。左(); 你看这是怎么回事...有没有递归的方法来更改/添加到变量中?