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