python常见异常以及处理方法
. .
一、 TypeError: ‘module’ object is not callable
代码:driver = webdriver.chrome()
异常:TypeError: 'module' object is not callable
解决:谷歌浏览器首字母 C 大写,即:driver = webdriver.Chrome()
二、“chromedriver” executable needs to be in path
原因:没有 Chrome 驱动
解决:需下载驱动添加到环境变量;如果已下载,需指明驱动路径。
如果还是报错:
1、在代码中添加路径,指明路径。
2、指明路径还报错,检查下自己的驱动版本。
3、如果添加路径,不报错,证明环境变量有问题。
三、selenium 点击元素报错 ElementClick
问题:明明定位成功,但是点击就是报错。
原因:元素被其他控件遮挡了。
解决:
1、用 js 去点击。
ele = driver.find_element_by_id(表达式)
driver.execute_script("argument[0].click;", ele)
2、用鼠标事件去点击。
ele = driver.find_element_by_id(表达式)
webdriver.ActionChains(driver).move_to_element(ele).click(ele).perform()
3、元素被遮挡了,点击一下旁边的不会产生事件的元素,取消遮挡。
四、selenium 使用 clear 无法清除文本框内容 WEB自动化_键盘事件
问题:清除文本框内容之后,文本框内容又被自动填充了。
解决:键盘事件,先全选文本框内容,再删除键,即可清除。
五、下拉框是 input 封装的,无法操作 WEB自动化_文件上传(input 标签和非input 标签)
解决:先定位到 input,然后输入内容,通过键盘事件,选择下拉框内容。
ele = driver.find_element_by_id(表达式)
ele.send_keys(Keys.DOWN)
ele.send_keys(Keys.ENTER)
六、找不到元素,NoSuchElement
原因:
1、之前的操作导致界面变化,元素定位表达式失效,定位失败。
也有可能是上一步操作异常,而上一步操作正是进入新页面的,所以没有进入新页面。
2、元素未加载就定位。
3、内嵌网页。
4、多标签页。
解决:
1、重新定位,使操作元素的时候,使用的表达式与页面变化后的一致, 解决上一步的异常。
2、等待。若元素未加载,则使用显示等待。若是浏览器反应过慢,则sleep。
3、切换到内嵌网页。
4、切换到对应的标签页。
七、 pycharm 导入selenium报错
原因:pycharm的虚拟环境没有安装selenium。
解决:在 pycharm 中通过设置重新安装selenium。
原因:当前项目下,有selenium.py 或名为 selenium的文件夹,导致与系统包名冲突。
解决:禁止使用关键字为自己的问、项目、变量命名。
八、驱动与浏览器不匹配
问题:SessionCreatedException ....... Chrome version 73
解决:查看本地驱动版本,下载对应的 chromedriver。
九、驱动被防火墙拦截
问题:WebDriverException:Message:Can not connect to the Service chromedriver.exe
原因:驱动被防火墙拦截。
解决:设置防火墙允许。
十、连接不上 chromedriver 服务
问题:WebDriverException:Message:Can not connect to the Service chromedriver
原因:代码通过 127.0.0.1 这个ip 访问 chromedriver 服务,hosts文件没有配置127.0.0.1指向localhost。
解决:配置本地hosts文件,添加 127.0.0.1 localhost。
十一、远程服务器异常
问题:RemoteDriverServerException
原因:当浏览器功能错误组合/字段 导致服务器不发送响应。
解决:检查远程 webdriver服务。
十二、各种找不到
1、NoSuchElementException:找不到元素。
2、NoSuchAttributeException:元素没有这个属性,确认定位到的元素是否具备目标属性,或检查一下单词拼写。
3、NoAlertPresentException:没有找到 alert 弹窗,观察页面,查看是否有弹窗出现,或加上等待。
4、NoSuchFrameException:没有找到内嵌网页,检查元素定位、或者单词拼写。
5、NoSuchWindowException:没找到窗口,窗口是不是被提前关闭了,或者检查单词拼写、列表索引、或判断条件。
6、TimeOutException:在显示等待,或隐式等待中,查找元素超时,也就是找不到元素。
十三、元素操作异常
1、ElementNotVisibleException:元素不可见异常
原因:selenium不能操作隐藏元素
1、可能元素在某操作后需要反应一下,才会从隐藏状态变为可见。
解决:可用 sleep 等待。
2、可能元素需要某些步骤之后,才会出现。
解决:去执行这些步骤。
3、如果一定要操作隐藏元素,可用 js 语法移出元素的不可见属性。
(style=“display:none”)
document.querySelector("li[class='b_ans b_top b_topborder']").removeAttribute("h")
表达式写 css 表达式定位
2、StaleElementException: 陈旧的元素引用异常
原因:页面刷新了,或页面跳转之后,使用了之前定位的元素。
解决:重新定位元素并操作
3、InvalidElementStateException:元素状态异常
原因:元素只读、不可点击等。
解决:等待或使用js移出影响属性。
4、ElementNotSelectableException:元素不可被选中
确认标签是 select
5、MoveTargetOutOfBoundsException:鼠标事件移动的位置不合适
解决:通常结合页面当前状态,换个位置即可。
|