今天继续使用Drissionpage框架来实现内部系统的网页自动化处理,编码过程中碰到2个新问题,记录一下解决方法:
自动登录后新弹出浏览器窗口的获取自动输入账号和密码登录的代码非常简单,如下所示:
from DrissionPage import WebPage,ChromiumOptionsco=ChromiumOptions()page=WebPage(chromium_options=co)page.set.window.max()page.get("http://xxx:8080")# 输入账号密码,自动登录page.ele("#userName").input("zhangsan")page.ele("#userPwd").input("123456")page.ele(".formsubmit").click()# 点击待办任务图标page.ele("#daiban").ele("tag:img").click()
但是在系统首页面点击待办任务图标时,一直报错:无法定位元素。根据浏览器开发者工具元素定位确认没有问题,调试跟踪发现点击待办任务图标时page对象中的html竟然是登录界面的脚本,才发现系统首页在新弹出的一个浏览器窗口中。
经过多次尝试,发现Drissionpage获取新弹出浏览器页面page的一种简便操作,直接get页面的url即可。修改代码如下:
# 点击待办任务图标page.get("http://xxx:8080/sword?ctrl=Mh001LoginCtrl_openWin")page.ele("#daiban").ele("tag:img").click()具有多个类的网页元素的获取
另外,在处理具有多个类的网页元素时,精确匹配类名查找会定位不到,如以下类名:
class="sGrid_data_row_div sGrid_data_row_div_dan "
调试跟踪中发现,类名中间的空格发生变化导致,查找Drissionpage官网说明,有模糊匹配的方法,则可以轻松搞定。
items=page.eles('.:sGrid_data_row_div')
使用过程中感觉Drissionpage定位网页元素的方法齐全,写法简练。