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()')
版权归原作者 WU_0720 所有, 如有侵权,请联系我们删除。