[英]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()
wait.until
的調用直接放在link.click()
而不是使用
while x <= link_count: ... x += 1
最好使用
for link in list_of_links:
有人認為,它提高了可讀性。 而且,你真的不需要關心數字x
,你真正關心的是循環遍歷鏈接,這就是for-loop
所做的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.