python结合selenium获取XX省交通违章数据的实现思路及代码
python结合selenium获取XX省交通违章数据的实现思路及代码
发布时间:2016-12-28 来源:查字典编辑
摘要:前言:目前在研究易信公众号,想给公众号增加一个获取个人交通违章的查询菜单,通过点击返回查询数据。以下是实施过程。一、首先,用火狐浏览器打开X...

前言:

目前在研究易信公众号,想给公众号增加一个获取个人交通违章的查询菜单,通过点击返回查询数据。以下是实施过程。

一、首先,用火狐浏览器打开XX省交管网,分析页面信息:

python结合selenium获取XX省交通违章数据的实现思路及代码1

可以看到共有4种查询种类,我只要查询违章数据,所以分析第一个电子警察信息查询就好了,用firebug分别查看车牌号码、车辆识别码、验证码输入框,可以得到id属性,分别为:carNum1、carAuthCode1、captcha1。

到这里,我们可以用selenium根据获取的id,自动填入车牌号码、车辆识别码、验证码,但验证码如何获取呢?。

二、获取验证码

第一次、通过Tesseract识别

经过测试,识别率太低了,不可行。

第二次、通过cookies查找验证码

通过查看服务器返回的cookies,发现里面竟然有验证码。。。

python结合selenium获取XX省交通违章数据的实现思路及代码2

三、编写程序测试

1、流程图和测试结果

python结合selenium获取XX省交通违章数据的实现思路及代码3

python结合selenium获取XX省交通违章数据的实现思路及代码4

2、源代码

from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC class JTWZ(): def __init__(self,carAuthCode,carNum): """ carAuthCode:车辆识别码 carNum:车牌号 """ self.driver = webdriver.Chrome() self.url = 'http://xxcx.hbsjg.gov.cn:8087/hbjj/' self.carAuthCode=carAuthCode self.carNum=carNum def get_content(self): self.driver.get(self.url) try: element = WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.ID, "checkCode1"))) print(u'开始登录...') except Exception as e: print(e) self.carNum1 = self.driver.find_element_by_id('carNum1') self.carNum1.send_keys(self.carNum) self.carAuthCode1 = self.driver.find_element_by_id('carAuthCode1') self.carAuthCode1.send_keys(self.carAuthCode) captcha1=self.driver.find_element_by_id('captcha1') #从cookies找寻验证码 for n in self.driver.get_cookies(): if n.get('name')!=None and n['name']=='RANDOMVALIDATECODEKEY1': checkCode1=n['value'] captcha1.send_keys(checkCode1) sub=self.driver.find_element_by_xpath("//input[@value='开始查询']") sub.click() try: element = WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.CLASS_NAME, "fsmiddle"))) print(u'获取违章内容成功,保存为:wz.jpg...') self.driver.save_screenshot('wz.jpg') return 0 except: print(u'获取失败...') return 1 finally: self.driver.quit() if __name__ == '__main__': jtwz=JTWZ(carAuthCode=000,carNum='') jtwz.get_content()

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新python学习
热门python学习
脚本专栏子分类