zoukankan      html  css  js  c++  java
  • selenium自动登录12306

    selenium自动登录12306

    import requests
    from hashlib import md5
    
    class Chaojiying_Client(object):
    
    	def __init__(self, username, password, soft_id):
    		self.username = username
    		password =  password.encode('utf8')
    		self.password = md5(password).hexdigest()
    		self.soft_id = soft_id
    		self.base_params = {
    			'user': self.username,
    			'pass2': self.password,
    			'softid': self.soft_id,
    		}
    		self.headers = {
    			'Connection': 'Keep-Alive',
    			'User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)',
    		}
    
    	def PostPic(self, im, codetype):
    		"""
    		im: 图片字节
    		codetype: 题目类型 参考 http://www.chaojiying.com/price.html
    		"""
    		params = {
    		    'codetype': codetype,
    		}
    		params.update(self.base_params)
    		files = {'userfile': ('ccc.jpg', im)}
    		r = requests.post('http://upload.chaojiying.net/Upload/Processing.php', data=params, files=files, headers=self.headers)
    		return r.json()
    
    	def ReportError(self, im_id):
    		"""
    		im_id:报错题目的图片ID
    		"""
    		params = {
    			'id': im_id,
    		}
    		params.update(self.base_params)
    		r = requests.post('http://upload.chaojiying.net/Upload/ReportError.php', data=params, headers=self.headers)
    		return r.json()
    # chaojiying = Chaojiying_Client('pachong', '827965', '908119')	#用户中心>>软件ID 生成一个替换 96001
    # im = open('code.png', 'rb').read()													#本地图片文件路径 来替换 a.jpg 有时WIN系统须要//
    # print( chaojiying.PostPic(im, 9004)['pic_str'])
    from selenium import webdriver
    from time import sleep
    # 规避被检测
    from selenium.webdriver import ChromeOptions
    from PIL import Image
    
    from selenium.webdriver import ActionChains
    # 规避检测
    option = ChromeOptions()     #实例化一个ChromeOptions对象
    option.add_experimental_option('excludeSwitches', ['enable-automation'])  #以键值对的形式加入参数
    bro = webdriver.Chrome(executable_path = './chromedriver',options = option)
    bro.get('https://kyfw.12306.cn/otn/login/init')
    bro.maximize_window()
    sleep(10)
    print("***************************************")
    bro.save_screenshot('./123.png')
    code_img = bro.find_element_by_xpath('/html/body/div[6]/div/form/div/ul[2]/li[4]/div/div/div[3]/img')
    location = code_img.location
    size = code_img.size
    # print(size)
    # print(location)
    sleep(10)
    userName = input('请输入12306用户名:')
    passWord = input('请输入12306密码  :')
    # 验证码左上角和右下角坐标
    # rangle = (
    # 	int(location['x']),int(location['y']),int(location['x']+size['width']),int(location['y']+size['height']))
    # i = Image.open('123.png')
    # code_img_name = 'code.png'
    # frame = i.crop(rangle)
    # frame.save(code_img_name)
    
    # https://kyfw.12306.cn/otn/login/init
    # 还是有问题,我猜测是获取验证码那里出的问题
    # 直接截图验证码
    bro.find_element_by_xpath('/html/body/div[6]/div/form/div/ul[2]/li[4]/div/div/div[3]/img').screenshot('./code.png')
    
    chaojiying = Chaojiying_Client('hhh', 'hhh', 'hhh')	#用户中心>>软件ID 生成一个替换 96001
    im = open('code.png', 'rb').read()													#本地图片文件路径 来替换 a.jpg 有时WIN系统须要//
    print(chaojiying.PostPic(im, 9004)['pic_str'])
    result = chaojiying.PostPic(im, 9004)['pic_str']
    all_list = []
    if '|' in result:
        list_1 = result.split('|')
        count_1 = len(list_1)
        for i in range(count_1):
            xy_list = []
            x = int(list_1[i].split(',')[0])
            y = int(list_1[i].split(',')[1])
            xy_list.append(x)
            xy_list.append(y)
            all_list.append(xy_list)
    else:
        x = int(result.split(',')[0])
        y = int(result.split(',')[1])
        xy_list = []
        xy_list.append(x)
        xy_list.append(y)
        all_list.append(xy_list)
    for xy in all_list:
    	x = xy[0]
    	y = xy[1]
    	ActionChains(bro).move_to_element_with_offset(code_img,x,y).click().perform()
    	sleep(0.5)
    bro.find_element_by_id('username').send_keys(userName)
    bro.find_element_by_id('password').send_keys(passWord)
    bro.find_element_by_id('loginSub').click()
    
    sleep(5)
    

    老是显示验证码校验错误,我感觉应该不是我的问题

  • 相关阅读:
    velocity导出word报错解决
    Java解析网段下包含的所有IP地址
    ORACLE中的DECODE函数
    td标签内的内容过长导致的问题的解决办法
    android 知识点
    geekNews 学习总结
    android 操蛋的gradle
    rxJava rxandroid 学习
    线程池ThreadPoolExecutor
    j2ee tomcat 部署学习
  • 原文地址:https://www.cnblogs.com/serendipity-my/p/13684659.html
Copyright © 2011-2022 走看看