- 定位值写错,比如ID,classname,xpath或者css没有写对。
解决1:使用浏览器检查工具获取xpath值,再用Xpath Finder验证是否存在;
解决2:使用浏览器console输入“document.getElementsBy**” 验证是否存在。 - 定位的元素在iframe中,需要切换到iframe才能定位成功。
解决:使用switch_to_iframe()方法,切换到相应的iframe。 - 页面发生跳转,当前driver网址和跳转后的网址不一致,即要定位的元素在跳转后的页面,而driver还是跳转前的页面。
解决1:
# 0.获取当前页面的句柄值
m0= driver.window_current_handle
# 1.点击链接后,打开新页面(假设是打开新的标签页)
# 2.等待新页面加载完成(新handle生成后)
while True:
m = driver.window_handles
if len(m)>1:
break
判断句柄数量,如果大于1,表示新页面加载完成
# 3.获取所有的页面句柄
m = driver.window_handles
# 4.获取新页面句柄
for x in m:
if x != m0:
handle_new = x
# 5.跳转新页面
driver.switch_to_window(handle_new)
解决2:
如果打开多个浏览器句柄和标签页的对应关系:标签页顺序(按照打开顺序):1 2 3 4 5,对应的句柄:0 4 3 2 1,依次类推。
browser.switch_to_window(browser.window_handles[0])
browser.title #第一个页面
browser.switch_to_window(browser.window_handles[1])
browser.title #最后一个页面
-
定位尽量找固定的元素,有些元素会根据用户ip,语言等显示不同的内容,导致定位失败。
-
DOM移除了那些元素之后,指针还在,但是指针指向的text就取不到了。
网友评论