[本文出自天外归云的博客园]

问题

最近在网上搜到了一些练习题,改编了一下这里的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篇的更多相关文章

  1. C++混合编程之idlcpp教程Python篇(9)

    上一篇在这 C++混合编程之idlcpp教程Python篇(8) 第一篇在这 C++混合编程之idlcpp教程(一) 与前面的工程相比,工程PythonTutorial7中除了四个文件PythonTu ...

  2. C++混合编程之idlcpp教程Python篇(8)

    上一篇在这 C++混合编程之idlcpp教程Python篇(7) 第一篇在这 C++混合编程之idlcpp教程(一) 与前面的工程相似,工程PythonTutorial6中,同样加入了四个文件:Pyt ...

  3. C++混合编程之idlcpp教程Python篇(7)

    上一篇在这 C++混合编程之idlcpp教程Python篇(6) 第一篇在这 C++混合编程之idlcpp教程(一) 与PythonTutorial4工程相似,工程PythonTutorial5中,同 ...

  4. C++混合编程之idlcpp教程Python篇(6)

    上一篇在这 C++混合编程之idlcpp教程Python篇(5) 第一篇在这 C++混合编程之idlcpp教程(一) 工程PythonTutorial4中加入了四个文件:PythonTutorial4 ...

  5. C++混合编程之idlcpp教程Python篇(5)

    上一篇在这  C++混合编程之idlcpp教程Python篇(4) 第一篇在这 C++混合编程之idlcpp教程(一) 与前面的工程相似,工程PythonTutorial3中,同样加入了三个文件:Py ...

  6. C++混合编程之idlcpp教程Python篇(4)

    上一篇在这 C++混合编程之idlcpp教程Python篇(3) 第一篇在这 C++混合编程之idlcpp教程(一) 与前面的工程相似,工程PythonTutorial2中,同样加入了三个文件 Pyt ...

  7. C++混合编程之idlcpp教程Python篇(3)

    上一篇 C++混合编程之idlcpp教程Python篇(2) 是一个 hello world 的例子,仅仅涉及了静态函数的调用.这一篇会有新的内容. 与PythonTutorial0相似,工程Pyth ...

  8. Noah的学习笔记之Python篇:命令行解析

    Noah的学习笔记之Python篇: 1.装饰器 2.函数“可变长参数” 3.命令行解析 注:本文全原创,作者:Noah Zhang  (http://www.cnblogs.com/noahzn/) ...

  9. Noah的学习笔记之Python篇:函数“可变长参数”

    Noah的学习笔记之Python篇: 1.装饰器 2.函数“可变长参数” 3.命令行解析 注:本文全原创,作者:Noah Zhang  (http://www.cnblogs.com/noahzn/) ...

随机推荐

  1. Python学习笔记(四)——编码和字符串

    一.编码 1.编码类别: (1)ASCII码:127个字母被编码到计算机里,也就是大小写英文字母.数字和一些符号 (2)GB2312码:中国制定的用于加入中文汉字的编码 (3)Unicode:防止由于 ...

  2. HDU 3062 Party ( 2-sat tarjan)

    Party Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  3. No package的问题解决

    更新pecl扩展 yum  install epel-release  //扩展包更新包yum  update //更新yum源

  4. php定时执行sphinx的增量索引

    /** * 每天定时执行的sphinx索引增量更新 * @author guo.jing * 2015-05-08 * @param $indexerArr(执行要更新的索引) */ public f ...

  5. 【转】Kotlin 和 Checked Exception

    Kotlin 和 Checked Exception 最近 JetBrains 的 Kotlin 语言忽然成了热门话题.国内小编们传言说,Kotlin 取代了 Java,成为了 Android 的“钦 ...

  6. session的取代者:Json Web Tokens----在客户端存储登陆状态

    https://auth0.com/blog/2014/01/07/angularjs-authentication-with-cookies-vs-token/

  7. 跟我学SharePoint 2013视频培训课程——什么是SharePoint 2013(1)

    课程简介 第一天,介绍什么是SharePoint 2013. 视频 SharePoint 2013 交流群 41032413

  8. linux中WDCP的日志彻底删除技巧

    apache或nginx都有开关默认日志,一个是正常访问日志,一个是错误的日志,目录在 /www/wdlinux/nginx-1.0.15/logs /www/wdlinux/httpd-2.2.22 ...

  9. 【转载】Android 关于arm64-v8a、armeabi-v7a、armeabi、x86下的so文件兼容问题

    转自:[欧阳鹏]http://blog.csdn.net/ouyang_peng Android 设备的CPU类型(通常称为”ABIs”) armeabiv-v7a: 第7代及以上的 ARM 处理器. ...

  10. java对存放实体的list进行排序

    java对存放实体的list进行排序: List<DistributionAgentsEntity> allAgents = new ArrayList<DistributionAg ...