使用Selenium Webdriver(Python)循环链接

时间:2014-03-10 19:30:11

标签: python selenium webdriver

下午全部。目前正在尝试使用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 /自动化,因为我只是进入了两者。在此先感谢!!

1 个答案:

答案 0 :(得分:3)

我不确定这是否可以解决问题,但一般来说最好使用WebDriverWait而不是implicitly_wait,因为WebDriveWait.until将继续调用提供的函数(例如{ {1}})直到返回的值不是driver.find_element_by_xpath - ish或达到超时(例如5000秒) - 此时它会引发False

selenium.common.execptions.TimeoutException
  1. 点击链接后,您应该等到链接的网址 加载。因此,对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() 的调用直接放在wait.until
  2. 之后
  3. 而不是使用

    link.click()

    最好使用

    while x <= link_count:
        ...
        x += 1
    

    有人认为,它提高了可读性。而且,你真的没有 需要关心的数字for link in list_of_links: ,你真正关心的是 循环遍历链接,这是x所做的。