新手爬蟲出現報錯“ no such element: Unable to locate element”
簡介
來自一個自學爬蟲的Python小白的經歷:通過網路上的教學視頻,模仿編程,由于視瞥澩比較老舊,技術更新較快,所以有些方面難以做到用視頻教學代碼成功運行,此篇只記錄產生的問題,包括已經解決和未解決的,再次申明,只是小白,只是簡單的記錄問題,
案例:斗魚直播板塊主播頁面照片地址,所屬標簽,熱度值,以及主播名字
初始代碼如下:
from selenium import webdriver
import time
class DouyuSpider:
def __init__(self):
self.start_url = "https://www.douyu.com/directory/all"
self.driver = webdriver.Chrome()
def get_content_list(self):
# 分組
li_list = self.driver.find_elements_by_xpath("//ul[@class='layout-Cover-list']/li")
print(li_list)
content_list = list()
for li in li_list:
item = {}
item["room_img"] = li.find_element_by_xpath(".//div[@class='LazyLoad is-visible DyImg DyListCover-pic']/img").get_attribute("src")
# print("+"*50)
item["room_title"] = li.find_element_by_xpath(".//div[@class='DyListCover-userName']")
# print("+"*50)
item["room_cate"] = li.find_element_by_xpath(".//div[@class='DyListCover-info']/span").text
item["author_name"] = li.find_element_by_xpath(".//div[@class='DyListCover-info']/h3").text
content_list.append(item)
print(item)
# 獲取下一頁
next_url = self.driver.find_elements_by_xpath("//span[@class='dy-Pagination-item-custom']")
next_url = next_url[0] if len(next_url)>0 else None
return content_list,next_url
def save_content_list(self,content_list):
# 略過
pass
def run(self):
# 1.獲取start_url
# 2.發送請求,獲取相應
self.driver.get(self.start_url)
# 3.提取資料,獲取下一頁的url
content_list, next_url = self.get_content_list()
# 4.保存資料
self.save_content_list(content_list)
# 5.點擊下一頁,回圈
while next_url is not None:
next_url.click()
content_list, next_url = self.get_content_list()
self.save_content_list(content_list)
if __name__ == "__main__":
douyuspider = DouyuSpider()
douyuspider.run()
運行結果如下:
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"./div/a/div[1]/div[1]/img"}
(Session info: chrome=88.0.4324.190)
根據百度得知,需要設定等待時間,雖然在seleinum中會有設定等待時間的方法,具體不詳,經試驗可使用time模塊的sleep方法,time.sleep(5),五秒左右測驗即可,修改部分的代碼如下:
def run(self):
# 1.獲取start_url
# 2.發送請求,獲取相應
self.driver.get(self.start_url)
time.sleep(5)
# 3.提取資料,獲取下一頁的url
content_list, next_url = self.get_content_list()
# 4.保存資料
self.save_content_list(content_list)
# 5.點擊下一頁,回圈
while next_url is not None:
next_url.click()
time.sleep(5)
content_list, next_url = self.get_content_list()
self.save_content_list(content_list)
通過sleep方法經測驗可以解決此問題,
之后運行代碼,出現此問題
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":".//div[@class='LazyLoad is-visible DyImg DyListCover-pic']/img"}
(Session info: chrome=88.0.4324.190)
修改部分代碼如下:
item["room_img"] = li.find_element_by_xpath("./div/a/div[1]/div[1]/img").get_attribute("src")
具體錯誤:會在正常執行中報錯,錯誤問題是指:找不到對應的element對應的xpath為.//div[@class='LazyLoad is-visible DyImg DyListCover-pic']/img,
解決方法: 注:此方法自我尋找,xpath之間的差異不詳,歡迎大佬指教
在瀏覽器中復制對應的xpath,可在xpath helper中實驗提取對應的部分,例如上述對應的xpath為./div/a/div[1]/div[1]/img經過測驗可以解決這個問題,
- 最后,再次宣告來自一個Python小白的自學程序中出現的問題,及時交流與解決,如有不對地方,歡迎指教,不喜勿噴,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/277677.html
標籤:python
上一篇:晉江文學城爬取小說評論情感分析
