Selenium查询10010账户余额——python篇
[本文出自天外归云的博客园]
问题
最近在网上搜到了一些练习题,改编了一下这里的20题如下:登陆中国联通网上营业厅 后选择「自助服务」-->「查询」-->「账户余额」,然后输出手机号码和可用额度。
思路
1. 通过抓包模拟接口请求的方式和一些爬网的相关方法解决;
2. 通过selenium进行一些web自动化操作解决。
编写脚本
这里选择了第二种用selenium的方法来解决,脚本如下:
# -*- coding: utf-8 -*-
from selenium import webdriver
import selenium.webdriver.support.ui as ui def login_query_10010(username,pwd):
driver = webdriver.PhantomJS()
driver.get("http://iservice.10010.com/e4/")
wait = ui.WebDriverWait(driver, 10)
login_frame = driver.find_element_by_xpath("html/body/div[5]/div[1]/iframe")
driver.switch_to_frame(login_frame);
wait.until(lambda dr: dr.find_element_by_id('userName').is_displayed())
driver.find_element_by_id("userName").send_keys(username)
driver.find_element_by_id("userPwd").send_keys(pwd)
driver.find_element_by_id("login1").click()
driver.switch_to_default_content()
wait.until(lambda dr: dr.find_element_by_id('menu_query').is_displayed())
driver.find_element_by_id("menu_query").click()
wait.until(lambda dr: dr.find_element_by_id('').is_displayed())
driver.find_element_by_id("").click()
wait.until(lambda dr: dr.find_element_by_xpath(".//*[@id='loadPage']/iframe").is_displayed())
account_info_frame = driver.find_element_by_xpath(".//*[@id='loadPage']/iframe")
driver.switch_to_frame(account_info_frame);
wait.until(lambda dr: dr.find_element_by_id('userInfoContent').is_displayed())
wait.until(lambda dr: dr.find_element_by_xpath(".//*[@id='userInfoContent']/dl[3]/dd").is_displayed())
phone_number = driver.find_element_by_xpath(".//*[@id='userInfoContent']/dl[3]/dd").text
print(u"电话号:"+phone_number)
wait.until(lambda dr: dr.find_element_by_xpath(".//*[@id='userInfoContent']/dl[4]/dd").is_displayed())
available_amount = driver.find_element_by_xpath(".//*[@id='userInfoContent']/dl[4]/dd").text
print(u"可用预存款:"+available_amount) if __name__ == '__main__':
login_query_10010("用户名","密码")
运行结果如下(脚本中用户名和密码为需替换的部分):

总结
总结一下遇到的一些经验点:
1. 通过phantomjs无界面浏览器可以实现无界面化web自动化访问;
2. 如果一个元素定位不到,要看看这个元素是否嵌在iframe元素中,这里用到了selenium定位页面元素之iframe元素的切换;
3. 确定页面元素可访问之后,如果还找不到定位的元素,可能是没有加载完成,需要进行一定时间的等待,这里用到了“wait.until”方法;
4. 定位页面元素可以用过id和一些属性,如果没有明显属性可以用来定位则可以考虑用xpath来定位,这里用到了firefox的一些xpath插件来辅助显示页面元素的xpath路径:

Selenium查询10010账户余额——python篇的更多相关文章
- C++混合编程之idlcpp教程Python篇(9)
上一篇在这 C++混合编程之idlcpp教程Python篇(8) 第一篇在这 C++混合编程之idlcpp教程(一) 与前面的工程相比,工程PythonTutorial7中除了四个文件PythonTu ...
- C++混合编程之idlcpp教程Python篇(8)
上一篇在这 C++混合编程之idlcpp教程Python篇(7) 第一篇在这 C++混合编程之idlcpp教程(一) 与前面的工程相似,工程PythonTutorial6中,同样加入了四个文件:Pyt ...
- C++混合编程之idlcpp教程Python篇(7)
上一篇在这 C++混合编程之idlcpp教程Python篇(6) 第一篇在这 C++混合编程之idlcpp教程(一) 与PythonTutorial4工程相似,工程PythonTutorial5中,同 ...
- C++混合编程之idlcpp教程Python篇(6)
上一篇在这 C++混合编程之idlcpp教程Python篇(5) 第一篇在这 C++混合编程之idlcpp教程(一) 工程PythonTutorial4中加入了四个文件:PythonTutorial4 ...
- C++混合编程之idlcpp教程Python篇(5)
上一篇在这 C++混合编程之idlcpp教程Python篇(4) 第一篇在这 C++混合编程之idlcpp教程(一) 与前面的工程相似,工程PythonTutorial3中,同样加入了三个文件:Py ...
- C++混合编程之idlcpp教程Python篇(4)
上一篇在这 C++混合编程之idlcpp教程Python篇(3) 第一篇在这 C++混合编程之idlcpp教程(一) 与前面的工程相似,工程PythonTutorial2中,同样加入了三个文件 Pyt ...
- C++混合编程之idlcpp教程Python篇(3)
上一篇 C++混合编程之idlcpp教程Python篇(2) 是一个 hello world 的例子,仅仅涉及了静态函数的调用.这一篇会有新的内容. 与PythonTutorial0相似,工程Pyth ...
- Noah的学习笔记之Python篇:命令行解析
Noah的学习笔记之Python篇: 1.装饰器 2.函数“可变长参数” 3.命令行解析 注:本文全原创,作者:Noah Zhang (http://www.cnblogs.com/noahzn/) ...
- Noah的学习笔记之Python篇:函数“可变长参数”
Noah的学习笔记之Python篇: 1.装饰器 2.函数“可变长参数” 3.命令行解析 注:本文全原创,作者:Noah Zhang (http://www.cnblogs.com/noahzn/) ...
随机推荐
- Python学习笔记(四)——编码和字符串
一.编码 1.编码类别: (1)ASCII码:127个字母被编码到计算机里,也就是大小写英文字母.数字和一些符号 (2)GB2312码:中国制定的用于加入中文汉字的编码 (3)Unicode:防止由于 ...
- HDU 3062 Party ( 2-sat tarjan)
Party Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- No package的问题解决
更新pecl扩展 yum install epel-release //扩展包更新包yum update //更新yum源
- php定时执行sphinx的增量索引
/** * 每天定时执行的sphinx索引增量更新 * @author guo.jing * 2015-05-08 * @param $indexerArr(执行要更新的索引) */ public f ...
- 【转】Kotlin 和 Checked Exception
Kotlin 和 Checked Exception 最近 JetBrains 的 Kotlin 语言忽然成了热门话题.国内小编们传言说,Kotlin 取代了 Java,成为了 Android 的“钦 ...
- session的取代者:Json Web Tokens----在客户端存储登陆状态
https://auth0.com/blog/2014/01/07/angularjs-authentication-with-cookies-vs-token/
- 跟我学SharePoint 2013视频培训课程——什么是SharePoint 2013(1)
课程简介 第一天,介绍什么是SharePoint 2013. 视频 SharePoint 2013 交流群 41032413
- linux中WDCP的日志彻底删除技巧
apache或nginx都有开关默认日志,一个是正常访问日志,一个是错误的日志,目录在 /www/wdlinux/nginx-1.0.15/logs /www/wdlinux/httpd-2.2.22 ...
- 【转载】Android 关于arm64-v8a、armeabi-v7a、armeabi、x86下的so文件兼容问题
转自:[欧阳鹏]http://blog.csdn.net/ouyang_peng Android 设备的CPU类型(通常称为”ABIs”) armeabiv-v7a: 第7代及以上的 ARM 处理器. ...
- java对存放实体的list进行排序
java对存放实体的list进行排序: List<DistributionAgentsEntity> allAgents = new ArrayList<DistributionAg ...