栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python+selenium使用xpath定位的问题

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python+selenium使用xpath定位的问题

python用selenium调chrome爬取网页信息遇到报错:

1.InvalidSelectorException: Message: invalid selector: The result of the xpath expression is [object Attr]. It should be an element

原因是selenium不支持从xpath中直接获取text文本信息。

name=web.find_element(By.XPATH,"/html/body/div[3]/div/div[2]/h2/text()")
website=web.find_element(By.XPATH,"/html/body/div[3]/div/div[2]/a[3]/@href")

xpath表达式修改为:

title = web.find_element(By.XPATH,"/html/body/div[3]/div/div[2]/h2").text

#获取节点某个属性的值
website = web.find_element(By.XPATH,"/html/body/div[3]/div/div[2]/a[3]").get_attribute("href")

2.Message: no such element: Unable to locate element:

xpath表达式一直无法准确定位,原因是通过浏览器开发者工具copy的xpath表达式和实际selenium获取的网页资源不同,表达式错误无法定位。(经对比发现是selenium有一个需用户同意的cookie弹窗)

通过print(web.page_source)拿到selenium获取的网页资源,发现有一个div未加载出来。其实应该是body下第2个div。通过开发者工具重新获得准确的xpath表达式。

原xpath表达式:

title = web.find_element(By.XPATH,"/html/body/div[3]/div/div[2]/h2").text

 改为正确的xpath表达式:

title = web.find_element(By.XPATH,"/html/body/div[2]/div/div[2]/h2").text

3.使用发现selenium效率过低,一个网页全部加载完毕要1分钟左右。解决办法是设置最长加载时长,超过时长则停止加载,开始定位数据。

from selenium.common.exceptions import TimeoutException

web = webdriver.Chrome()
web.set_page_load_timeout(10)#设置页面加载时长
web.set_script_timeout(10)#设置JS加载时长

try:
	web.get(str(url))
except TimeoutException: #加载超时异常处理
	web.execute_script('window.stop()')  

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/977925.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号