簡體   English   中英

使用Selenium Webdriver(Python)循環鏈接

[英]Loop through links using Selenium Webdriver (Python)

下午全部。 目前正在嘗試使用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 /自動化,因為我剛剛進入兩者。 提前致謝!!

我不確定這是否能解決問題,但一般情況下最好使用WebDriverWait而不是implicitly_wait因為WebDriveWait.until將繼續調用提供的函數(例如driver.find_element_by_xpath ),直到返回的值不是False -ish或者達到超時(例如5000秒) - 此時它會引發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所做的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM