一、 Message: no such element: Unable to locate element:selenium报错
最近在使用selenium爬虫时遇到了这个报错,反复检查了自己xpath路径确认没有问题。但是程序还是会报错:“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]) # 跳转窗口
time.sleep(5)
for x in range(1,10):
# 点击下一题
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()
# 点击查看答案
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')
二、解决方案
造成上述问题可能由以下原因导致:
原因一:
在打开多个窗口的情况下一定要注意selenim到底处于那个窗口上,如上述代码我打开了两个窗口最开始就是没有注意到,其实我的selenim一直处于第一个窗口中。所以我一直是在用第二窗口上的xpath路径在第一个窗口中匹配内容,所以肯定是会报错的。这时就是需要切换到自己的窗口了。代码如下:
首先可以去获取自己打开的窗口:
list_windows = driver.window_handles
然后在去切换到自己想要的窗口下:
driver.switch_to.window(list_windows[1]) #list_windows 存储了上一步中获取的窗口
原因二:
在网络不稳定的情况下可能网页并没有完全加载完成,但是这个时候我们已经开始进行xpath路径解析了。这样就会导致找不到我们想要的内容也是会报错。
这个时候可以让程序这里等待一会,等待页面加载完全在进行访问。等待代码如下:文章来源:https://www.toymoban.com/news/detail-511936.html
time.sleep(5)
原因三
还有一个原因可能就是自己的xpath路径确实是有问题的,大家可以通过谷歌或者火狐的“xpathhelper”插件来测试一下路径是否正确。插件的安装和使用可以百度一下。文章来源地址https://www.toymoban.com/news/detail-511936.html
到了这里,关于Message: no such element: Unable to locate element:selenium报错的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!