一、 Message: no such element: Unable to locate element:selenium報(bào)錯(cuò)
???????最近在使用selenium爬蟲時(shí)遇到了這個(gè)報(bào)錯(cuò),反復(fù)檢查了自己xpath路徑確認(rèn)沒有問題。但是程序還是會(huì)報(bào)錯(cuò):“Message: no such element: Unable to locate element: {“method”:“xpath”,“selector”:“//*[@id=“rootWrapper”]/div/div/div/div[2]/div/div[2]/div/div/div/div[2]/div[2]/ul/li[1]”}”。
代碼如下:
import time
from selenium import webdriver as wb
import warnings
import pyautogui as pg
from PIL import ImageGrab,Image
import pytesseract
warnings.filterwarnings('ignore')
driver = wb.Chrome(executable_path='D:/cromedriver/chromedriver.exe')
# 登錄
driver.get("https://www.xxxxxx.com")
time.sleep(3)
# 窗口一
driver.find_element_by_xpath('//*[@id="root"]/div/div[2]/div[1]/div/div[2]/div/span[1]').click()
#輸入用戶密碼
driver.find_element_by_id('username').send_keys('xxxxxx')
driver.find_element_by_id('password').send_keys('xxxxxx')
driver.find_element_by_xpath('//*[@id="root"]/div/div/div[2]/div[4]/div/div[2]/form/div[4]/div/div/div/button').click()
# 等待加載
time.sleep(5)
# 窗口二
driver.execute_script('window.open("https://www.xxxxxxx.com/new_yun/#/examPage?exam_id=942&exam_title=%E4%BA%91%E6%9C%8D%E5%8A%A1HCIP20220325&type=prewBank&kind=1&back=2")')
# list_windows = driver.window_handles # 獲取的窗口
# driver.switch_to.window(list_windows[1]) # 跳轉(zhuǎn)窗口
time.sleep(5)
for x in range(1,10):
# 點(diǎn)擊下一題
driver.find_element_by_xpath('//*[@id="rootWrapper"]/div/div/div/div[2]/div/div[2]/div/div/div/div[2]/div[2]/ul/li['+str(x)+']').click()
# 點(diǎn)擊查看答案
driver.find_element_by_xpath('//*[@id="rootWrapper"]/div/div/div/div[2]/div/div[2]/div/div/div/div[1]/div/div[2]/div[2]/button').click()
img1 = ImageGrab.grab(bbox=(120,204,1295,603))
img1.save('./jt/'+str(x)+'.png')
img2 = ImageGrab.grab(bbox=(130,745,200,773))
img2.save('./da/'+str(x)+'.png')
二、解決方案
造成上述問題可能由以下原因?qū)е拢?/p>
原因一:
???????在打開多個(gè)窗口的情況下一定要注意selenim到底處于那個(gè)窗口上,如上述代碼我打開了兩個(gè)窗口最開始就是沒有注意到,其實(shí)我的selenim一直處于第一個(gè)窗口中。所以我一直是在用第二窗口上的xpath路徑在第一個(gè)窗口中匹配內(nèi)容,所以肯定是會(huì)報(bào)錯(cuò)的。這時(shí)就是需要切換到自己的窗口了。代碼如下:
首先可以去獲取自己打開的窗口:
list_windows = driver.window_handles
然后在去切換到自己想要的窗口下:
driver.switch_to.window(list_windows[1]) #list_windows 存儲(chǔ)了上一步中獲取的窗口
原因二:
???????在網(wǎng)絡(luò)不穩(wěn)定的情況下可能網(wǎng)頁并沒有完全加載完成,但是這個(gè)時(shí)候我們已經(jīng)開始進(jìn)行xpath路徑解析了。這樣就會(huì)導(dǎo)致找不到我們想要的內(nèi)容也是會(huì)報(bào)錯(cuò)。
???????這個(gè)時(shí)候可以讓程序這里等待一會(huì),等待頁面加載完全在進(jìn)行訪問。等待代碼如下:文章來源:http://www.zghlxwxcb.cn/news/detail-511936.html
time.sleep(5)
原因三
???????還有一個(gè)原因可能就是自己的xpath路徑確實(shí)是有問題的,大家可以通過谷歌或者火狐的“xpathhelper”插件來測(cè)試一下路徑是否正確。插件的安裝和使用可以百度一下。文章來源地址http://www.zghlxwxcb.cn/news/detail-511936.html
到了這里,關(guān)于Message: no such element: Unable to locate element:selenium報(bào)錯(cuò)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!