学完基础应用,打开员工网页表单练手。点击菜单什么的都很顺利,但是在定位选项框的时候,就是报错,是怎么回事?没有人教,一头雾水,连搜索都找不着关键词。在盲目搜索半天后,终于,大数据指引我们到了正确的 方向——网页表单结构的原因。
查看我们要定位的元素,看是否有frame标签。
如果本级没有,就往上查找,一般在开头有一个大框架<frame> 。再接着看我们要定位的元素,是否在下一级框架<iframe>里。如果是这样的结构,就是由于iframe嵌套,导致直接定位不到。
什么是iframe,百度一下。
IFRAME是HTML标签,作用是文档中的文档,或者浮动的框架(FRAME)。iframe元素会创建包含另外一个文档的内联框架(即行内框架)。
属性 | 值 | 描述 |
---|---|---|
classname | 规定元素的类名(classname) | |
id | 规定元素的特定id | |
style_definition | 规定元素的行内样式(inline style) | |
text | 规定元素的额外信息(可在工具提示中显示) |
找到问题所在,解决方法就也能找到了。
from selenium import webdriver
web = webdriver.chrome()
web.get("https://xxxxxxx.com/")
# 定位标签
ifranme = web.find_element_by_id('login_frame')
# 切换到标签上
web.switch_to.frame(ifranme)
具体来说,就是frame切换。而切换方法在csdn上有很多详细的用法了,这里简单说一下,方便自己查看学习。
1、frame有具体的name 和 id 属性(id和name的属性值如果是动态变化的数字 就不能使用)——直接通过id或name属性切换iframe(如上)。
2、frame标签本身没有id 和 name 属性或者其是动态——先找到iframe,定位iframe元素(可以通过元素定位的各种方式:xpath,css等等),用对象接收,再去跳转。
iframe = driver.find_element_by_id('iframe_id') # 根据ID查找
iframe = driver.find_element_by_name('iframe_name') # 根据名称查找
iframe = driver.find_element_by_css_selector('iframe_css_selector') # 根据CSS选择器查找
iframe = driver.find_element_by_xpath('iframe_xpath') # 根据XPath查找
在解决表单跳出的过程中,还学到了其他相关的知识,放一起学习了。
1、跳转到父级iframe中
driver.switchTo().parentFrame()
2、切换到默认iframe
driver.switchTo().defaultContent()
总结:iframe往内是一层一层进,跳出可以一下子到最外层。
标签:name,处理,frame,元素,driver,表单,iframe,id From: https://blog.csdn.net/weixin_58971210/article/details/145049952