1. 错误: 当遇到Selenium定位不到元素时出现(报:NoSuchElementException)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {“method”:”name”,”selector”:”title”}
分析原因:
1.Frame/Iframe原因定位不到元素(这个是最常见的原因,由于frame中镶嵌iframe导致定位元素失败,首先需要理解的是iframe相当于对本页面的一个重定向操作,因此当遇到iframe时其实是已经跳转到另一个页面,对当前页面的定位当然也就无效)。 解决办法:
#先定位到iframe
iframe = self.driver.find_element_by_xpath(‘//*[@id=”iframe_box”]/div[2]/iframe’)
#再将定位对象传给switch_to_frame()方法
self.driver.switch_to.frame(iframe)
接下来按照正常的页面定位就ok,完美解决。
2.Xpath描述错误原因:如果你是用xpath定位而你得页面没有使用iframe的时候, 你可能需要重新检查一下你的xpath是否有错误,由于Xpath层级太复杂,容易犯错,手写xpath一定要格外小心,不过我们浏览器有自带的获取xpath 的方法,比如QQ浏览器F12进入调试模式,找到要定位的代码右键COPY就可以看到copyXpath的选项,其它浏览器获取xpath方式可以百度一下用起来很方便。
3.页面还没有加载出来,就对页面上的元素进行操作也会导致获取不到元素定位,解决办法
import time
time.sleep(3)
加入等待时间,这种方式属于强制等待,用起来不灵活,其它的等待方式还有隐性等待implicitly_wait(X)显性等待WebDriverWait。关于它们的区别参考http://www.jb51.net/article/92684.htm 这里不再多说。
4.动态id定位不到元素:
解决方案:
如果发现是动态id,直接用xpath定位或其他方式定位。
定位动态id链接:
http://blog.csdn.net/huilan_same/article/details/52594354
2. 错误: DeprecationWarning: use driver.switch_to.frame instead
warnings.warn(“use driver.switch_to.frame instead”, DeprecationWarning)
原因:这类型的警告大多属于版本更新时,所使用的方法过时的原因,可以在该方法的说明处查找替换的方法
解决:这样的警告说明switch_to_frame方法已经被拆分 ,将它改成switch_to.frame,完美解决。