web自动化之常见的异常(第八天)

发布时间:2024年01月03日

一、 TypeError: 'module' object is not callable? ?

driver = webdriver.chrome()
TypeError: 'module' object is not callable

类型错误:模块不能被调用
? ? 解决方案:谷歌浏览器首字母 C 大写

二、'chromedriver' executable needs to be in PATH

selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in PATH
? ? 问题原因:没有 Chrome 驱动,需下载驱动添加到环境变量,或者已下载,指明驱动路径

? ? 如果还是报错
? ? ? ? 1、在代码中添加路径,指明路径
? ? ? ? 2、指明路径还报错,检查下自己的驱动版本,
? ? ? ? 3、如果添加路径,不报错,证明环境变量有问题

加上chrome的驱动路径即可

三、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 无法清除文本框内容

现象:清楚文本框之后,文本框内容又被自动填充了(就好比清除日期
解决:键盘事件,先 全选文本框内容 ?再删除键(或者先全选,再直接写内容),即可清除

五、下拉框是 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报错

原因1:pycharm的虚拟环境没有安装selenium
解决:在 pycharm 中通过设置重新安装selenium

原因2:当前项目下,有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

win+r输入C:\WINDOWS\system32\drivers\etc

十一、远程服务器异常

现象:RemoteDriverServerException
原因:当浏览器功能错误组合/字段 导致服务器不发送响应
解决:检查远程 webdriver服务(环境问题)

十二、各种找不到

? ? 1、NoSuchElementException:找不到元素,参考之前的解决方案(第六点)
? ? 2、NoSuchAttributeException:元素没有这个属性,确认定位到的元素是否具备目标属性,或检查一下单词拼写
? ? 3、NoAlertPresentException:没有找到alert弹窗,观察页面,查看是否有弹窗出现,或加上等待(即遇到弹窗,不要想到不想就当做alert弹窗处理,自己鼠标右键【检查】看一下是不是html标签,如果是,就不能用alert处理弹窗,如果是alert弹窗的话,鼠标右键是不会有【检查】的)
? ? 4、NoSuchFrameException:没有找到内嵌网页,检查元素定位、或者单词拼写
? ? 5、NoSuchWindowException:没找到窗口,窗口是不是被提前关闭了,或者检查单词拼写、列表索引、或判断条件
? ? 6、TimeOutException:在显示等待或隐式等待中,查找元素超时,也就是找不到元素(解决方法参考第六点)

十三、元素操作异常

? ? 1、ElementNotVisibleException:元素不可见异常,selenium不能操作隐藏元素
? ? ? ? 有可能是元素在某操作后需要反应一下(加time.sleep),才会从隐藏状态变为可见
? ? ? ? 有可能是元素需要某些步骤之后,才会出现,那就去执行这些步
? ? ? ? 如果非要去,非正规的操作隐藏元素,比如面试官考你:用js 语法移出元素的不可见属性(style=“display:none”)

例子:把h这个属性移除掉


? document.querySelector("li[class='b_ans b_top b_topborder']").removeAttribute("h")
? ? ? ? 表达式写 css 表达式定位
? ? 2、StaleElementException: 陈旧的元素引用异常,页面刷新了,或页面跳转之后,使用了之前定位的元素,重新定位元素并操作

StaleElementException异常,举例可参考以下链接

web自动化之常见的异常,selenium.common.exceptions.StaleElementReferenceException-CSDN博客

? ? 3、InvalidElementStateException:元素状态异常,元素只读、不可点击等,解决方法,等待或使用js移出影响属性
? ? 4、ElementNotSelectableException:元素不可被选中,通常再操作下拉框的时候,要确认标签是 select(如果下拉框不是select标签,就不能用Select类)
? ? 5、MoveTargetOutOfBoundsException:鼠标事件移动的位置不合适,通常结合页面当前状态,换个位置即可

文章来源:https://blog.csdn.net/weixin_42242910/article/details/135266928
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。