python selenium css定位ie元素

引言

使用ie浏览器的痛苦,就是无法通过xpath去定位元素,因为浏览器F12无法支持,而且对于IE而言,xpath的运行速率非常的低,所以在网上学习了一下css是如何定位选择器的。
需求是公司有个只能用ie打开的网站,而这种繁杂的运维工作实在是浪费时间,浪费生命,于是用了一晚上时间加工赶点,完成了一版自动化脚本,在此记录一下中间遇到的问题。

环境

  1. IE浏览器9
  2. python3
  3. selenium

selenium ie切换frame/iframe

因为我想要定位的元素在这样的一个结构下: html>body>frame>frame>frameset>iframe>td
所以,frame这个幸运的父标签是有name属性的,可以先用下面代码进入frame标签:

driver.switch_to.frame('leftFrame')

进入后,还需要进入iframe才能定位我自己想要的属性td,于是进入iframe:

#解释一下这里在下面
iframe_left = driver.find_element_by_css_selector('body>table>tbody>tr>td>table>tbody>tr>td>iframe')
driver.switch_to.frame(iframe_left)

其实css的元素定位很容易,如同xpath一样,会看的话手写即可,css定位元素的关键是在于每个html标签作为起始点,而接下来层级递减即可,代码中就是我想进入的iframe没有name,id属性,所以采用css选择器逐层标签递减定位。(以html标签为起始点,不用写,然后是body下面有table,table子标签有tbody,tbody子标签有tr以此类推,最后定位到iframe,中间用>来进行连接)。

定位多个无name、id的标签元素

如果你想要定位的元素也在frame或这iframe标签中,一定要先进入frame后才可定位具体元素。
进入frame后,我发现想定位的元素依然没有name、id属性,但是有class属性,所以采用了一个机智的方法进行定位:
通过遍历所有class = “menu”的td标签,若文本内容为管理,进行点击,”.menu” 的含义是class = “menu”

#通过遍历所有class = "menu"的td标签,若文本内容为管理,进行点击
menus = driver.find_elements_by_css_selector('td.menu')
    for menu in menus:
        if '管理' in menu.text:
            menu.click()

如果要是标签是a标签,可以通过模糊内容进行定位,代码如下:

#类似模糊查询,模糊超链接
driver.find_element_by_partial_link_text('更新费用').click()

总结

用ie实在是太痛苦了!!…简直忧伤!不过倒是对css选择器有了个小了解….

猜你喜欢

转载自blog.csdn.net/s740556472/article/details/80574606