一尘不染

使用Selenium Webdriver(Python)循环链接

selenium

下午全部。当前尝试使用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,因为我只是同时进入两者。提前致谢!!


阅读 509

收藏
2020-06-26

共1个答案

一尘不染

我不确定这是否可以解决问题,但总的来说,最好使用WebDriverWait而不是使用WebDriveWait.untilimplicitly_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作用。

2020-06-26