当前位置: 首页 > 面试题库 >

使用Selenium Webdriver(Python)循环链接

丁雅懿
2023-03-14
问题内容

下午全部。当前尝试使用Selenium
Webdriver循环浏览页面上的链接列表。具体来说,它是单击链接,从所述页面上抓取一行文本以写入文件,然后返回,然后单击列表中的下一个链接。以下是我所拥有的:

    def test_text_saver(self):
    driver = self.driver
    textsave = open("textsave.txt","w")
    list_of_links = driver.find_elements_by_xpath("//*[@id=\"learn-sub\"]/div[4]/div/div/div/div[1]/div[2]/div/div/ul/li")
    """Initializing Link Count:"""
    link_count = len(list_of_links)
    while x <= link_count:
        print x
        driver.find_element_by_xpath("//*[@id=\"learn-sub\"]/div[4]/div/div/div/div[1]/div[2]/div/div/ul/li["+str(x)+"]/a").click()
        text = driver.find_element_by_xpath("//*[@id=\"learn-sub\"]/div[4]/div/div/div/div[1]/div[1]/div[1]/h1").text
        textsave.write(text+"\n\n")
        driver.implicitly_wait(5000)
        driver.back()
        x += 1
    textsave.close()

运行时,它会转到初始页面,然后返回主页面,而不是应有的子页面。打印x,我可以看到它递增了三倍而不是一倍。此后它也崩溃。我已经检查了所有的xpath等,并确认列表中的链接数得到了正确的计数。

非常感谢任何输入-这实际上只是为了扩展我的python / automation,因为我只是同时进入两者。提前致谢!!


问题答案:

我不确定这是否可以解决问题,但总的来说,最好使用WebDriverWait而不是使用WebDriveWait.until,implicitly_wait因为它会一直调用提供的函数(例如),直到返回的值不是-
ish或超时(例如5000秒) )达到了-
在那个时候它提出一个。driver.find_element_by_xpath``False``selenium.common.execptions.TimeoutException

import selenium.webdriver.support.ui as UI

def test_text_saver(self):
    driver = self.driver
    wait = UI.WebDriverWait(driver, 5000)
    with open("textsave.txt","w") as textsave:
        list_of_links = driver.find_elements_by_xpath("//*[@id=\"learn-sub\"]/div[4]/div/div/div/div[1]/div[2]/div/div/ul/li/a")
        for link in list_of_links:  # 2
            link.click()   # 1
            text = wait.until(
                lambda driver: driver.find_element_by_xpath("//*[@id=\"learn-sub\"]/div[4]/div/div/div/div[1]/div[1]/div[1]/h1").text)
            textsave.write(text+"\n\n")
            driver.back()
  1. 单击链接后,应等待加载链接的URL。因此,wait.until直接在link.click()
  2. 而不是使用
    while x <= link_count:
    ...
    x += 1
    

最好用

    for link in list_of_links:

有人认为,它提高了可读性。而且,您真的不需要关心数字x,您真正关心的只是循环链接,这就是它的for-loop作用。



 类似资料:
  • 我正在用我的java书复习数据结构,我需要重新创建一个循环链表。我对这个无限循环的链表有问题,弄不清楚为什么。我可以将值插入到列表中,但是打印和删除这些值似乎会无限循环最初插入的值。我如何更改我的List类以避免无限循环? CircularList.Class 链接类

  • 在selenium中,在python中,我必须循环使用Jira1、jira2、jira3链接 对于范围(1,4)中的i: driver.find_element(By.XPATH,"//a[text()='Jira'] /str(i)")。 它给了我一个错误NoSuchElementException:没有这样的元素:无法定位元素:{“方法”:“xpath”,“选择器”:“//a[text()='

  • 问题内容: 我想创建一个循环/循环链接列表,其中列表的尾部将指向列表的头部。那么,在创建列表之后,是否可以使用和修改尾节点以使其具有循环/循环性?如果是这样,您能告诉我一些代码如何发生吗? 如果无法使用,应如何创建自己的循环/循环链表实现?您能否向我展示此实现的外观框架? 如果您需要更多详细信息,请让我知道,我将消除任何混乱。 问题答案:

  • 基本上,findNode()搜索其数据等于作为参数插入的字符串的节点,但当我调用outputList()方法(该方法返回屏幕上当前节点的字符串表示)时,它将继续无限循环。 outputList方法是: 如有任何帮助,我们将不胜感激。提前道谢。

  • 我创建了一个双循环链表。 我需要知道每个节点到头部的距离。 因为当我必须删除或获取具有特定密钥的节点时,如果两个节点具有相同的密钥和相同的距离,则必须删除或获取这两个节点,否则必须删除最靠近头部的节点。 我不知道如何计算距离,因为它是圆形的。。。 这个链表的插入就是这样工作的。 所有的节点都去追头。 例: 1)头部 2) 头部A(插入A) 3) 头部B-A(插入B) 4) 头部C-B-A(插入C)

  • 我的任务是用java实现一个循环链表(升序),但问题是它在无限循环中运行 我创建了一个节点类,其中定义了两个元素。 现在,在列表的第二个类中,我做了一个insert函数,我在start中定义了一个节点head=null,并创建了一个新的nNode。之后,我在head部分中检查,如果head==null,那么第一个元素将是nNode。插入第一个元素后,我将比较下一个元素和head元素,如果head元