@Author:xiaozhu_sai
Date:2020/12/15
- 发生异常: NoSuchElementException
Message: no such element: Unable to locate element: - 发生异常: ElementNotInteractableException Message: element not interactable
- 发生异常: ElementClickInterceptedException
Message: element click intercepted: Element
#使用xpath定位一个输入框。异常1
_browser.find_element_by_xpath('//*[@id="edit_body"]/div[2]/div[1]/form/input[2]').send_keys('xx')
#定位一个登陆按钮,点击。异常2
_browser.find_element_by_name('0MKKey').click()
#点击登录按钮。异常3
_browser.find_element_by_css_selector('input[value^="登"]').click()
异常原因:使用xpath定位元素抛出异常的原因是因为目标网页有两个form和相同的“form、name,tag_name”等完全一样的属性,且使用不同的端口或者不同的接管方式会导致两个form的顺序不一样(一会在前一会在后),导致xpath定位失效。很明显,使用name定位元素同样失败,而且两个form的元素属性绝大部分都相同,建议各位朋友在使用非ID的方式定位元素时,先在f12中检索以保证正确定位。
我搜索了全网的解决方案,大部分都是在说此报错是因为没有加载元素,但是添加了显示&隐式等待后仍然无法解决。
解决方案:
- 输入框的定位,使用更精确的定位方式定位,例如css的父子关系定位,我这里使用了双重name的定位.
- 按钮的定位,使用css属性值定位,参考Selenium四 find_element_by_css_selector()的几种方法,value属性值以“登”开头的元素,就是我需要的元素。同时点击方法更改为使用js点击,具体异常原因不明。参考Selenium无法点击元素,报错:ElementClickInterceptedException:element click intercepted
#输入框的定位,异常1的解决
_browser.find_element_by_name('f3').find_element_by_name('DDDDD').send_keys(user)
#按钮的定位,异常2和3的解决
button1 = _browser.find_element_by_css_selector('input[value^="登"]')
_browser.execute_script("arguments[0].click();",button1)