0


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()')  
标签: python selenium chrome

本文转载自: https://blog.csdn.net/WU_0720/article/details/125300288
版权归原作者 WU_0720 所有, 如有侵权,请联系我们删除。

“python+selenium使用xpath定位的问题”的评论:

还没有评论