Selenium查询10010账户余额——python篇

简介: [本文出自天外归云的博客园] 问题 最近在网上搜到了一些练习题,改编了一下这里的20题如下:登陆中国联通网上营业厅 后选择「自助服务」-->「查询」-->「账户余额」,然后输出手机号码和可用额度。 思路 1. 通过抓包模拟接口请求的方式和一些爬网的相关方法解决; 2. 通过selenium进行一些web自动化操作解决。

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

问题

最近在网上搜到了一些练习题,改编了一下这里的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('000100010002').is_displayed())
    driver.find_element_by_id("000100010002").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路径:

 

 
相关文章
|
29天前
|
Python
Python实现简易天气查询系统
Python实现简易天气查询系统
29 4
|
1月前
|
缓存 API 定位技术
使用Python调用百度地图API实现地址查询
使用Python调用百度地图API实现地址查询
105 0
|
1月前
|
JavaScript 前端开发 测试技术
Python Selenium基本用法
Python Selenium基本用法
29 2
|
2月前
|
Web App开发 数据采集 前端开发
基于Python的Selenium详解:从入门到实践
基于Python的Selenium详解:从入门到实践
105 0
|
1月前
|
SQL 关系型数据库 MySQL
用 Python 连接数据库并进行查询。
【2月更文挑战第12天】【2月更文挑战第32篇】用 Python 连接数据库并进行查询。
|
4天前
|
前端开发 测试技术 C++
Python自动化测试面试:unittest、pytest与Selenium详解
【4月更文挑战第19天】本文聚焦Python自动化测试面试,重点讨论unittest、pytest和Selenium三大框架。unittest涉及断言、TestSuite和覆盖率报告;易错点包括测试代码冗余和异常处理。pytest涵盖fixtures、参数化测试和插件系统,要注意避免过度依赖unittest特性。Selenium的核心是WebDriver操作、等待策略和测试报告生成,强调智能等待和元素定位策略。掌握这些关键点将有助于提升面试表现。
18 0
|
12天前
|
Web App开发 测试技术 网络安全
|
1月前
|
数据采集 搜索推荐 数据挖掘
使用Python制作一个批量查询搜索排名的SEO免费工具
最近工作中需要用上 Google SEO(搜索引擎优化),有了解过的朋友们应该都知道SEO必不可少的工作之一就是查询关键词的搜索排名。关键词少的时候可以一个一个去查没什么问题,但是到了后期,一个网站都有几百上千的关键词,你再去一个一个查,至少要花费数小时的时间。 虽然市面上有很多SEO免费或者收费工具,但免费的基本都不能批量查,网上免费的最多也就只能10个10个查询,而且查询速度很慢。收费的工具如Ahrefs、SEMrush等以月为单位收费最低也都要上百美刀/月,当然如果觉得价格合适也可以进行购买,毕竟这些工具的很多功能都很实用。今天我给大家分享的这个排名搜索工具基于python实现,当然肯定
40 0
|
1月前
|
Web App开发 前端开发 JavaScript
Python Selenium是一个强大的自动化测试工具
Python Selenium是一个强大的自动化测试工具
|
1月前
|
Web App开发 测试技术 Python
使用 Python 结合 Selenium 访问一个 url
使用 Python 结合 Selenium 访问一个 url
26 0

热门文章

最新文章