码迷,mamicode.com
首页 > 编程语言 > 详细

用python+selenium获取XX省交通违章数据

时间:2016-06-26 15:26:51      阅读:252      评论:0      收藏:0      [点我收藏+]

标签:

前言:

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

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

技术分享

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

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

二、获取验证码

  第一次、通过Tesseract识别

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

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

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

    技术分享

三、编写程序测试

  1、流程图和测试结果

技术分享技术分享

  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()
View Code

4、参考信息:

  selenium + python自动化测试环境搭建

  chromedriver_win32.zip

用python+selenium获取XX省交通违章数据

标签:

原文地址:http://www.cnblogs.com/hxs2660/p/5617921.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!