首页 > 其他 > 详细

12306 的selenium实现模拟登陆

时间:2019-05-07 18:25:36      阅读:258      评论:0      收藏:0      [点我收藏+]

# 下面是12306 实现的模拟登陆

# 解码 应用超级鹰,注册用户,左侧栏软件ID进去,开启一个新软件,拿到软件ID

# 下面测试都在jupyter里面实现

# 超级鹰类  cell
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):

        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)
        print(r.json()) #{‘err_no‘: 0, ‘err_str‘: ‘OK‘, ‘pic_id‘: ‘9067216592371000003‘, ‘pic_str‘: ‘24,62|40,146|112,141‘, ‘md5‘: ‘c4ee4d4fb269521c47de228d5c6d6d3e‘}
        return r.json()

    def ReportError(self, im_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()

  # 下面是12306 页面的处理

from selenium import webdriver
import time
import requests
from lxml import etree
from urllib import request
from selenium.webdriver.common.action_chains import ActionChains
from PIL import Image
bro = webdriver.Chrome(executable_path=./chromedriver.exe)
bro.get(https://kyfw.12306.cn/otn/login/init)
# page_text = bro.page_source
# tree = etree.HTML(page_text)
# code_img_src = tree.xpath(‘//*[@id="loginForm"]/div/ul[2]/li[4]/div/div/div[3]/img/@src‘)[0]
# print(code_img_src)
# request.urlretrieve(url=code_img_src,filename=‘./code.jpg‘)
time.sleep(3)

code_img_ele = bro.find_element_by_xpath(//*[@id="loginForm"]/div/ul[2]/li[4]/div/div/div[3]/img)  #找见验证码区域
time.sleep(3)
location = code_img_ele.location  # x,y
print(--,location)  # -- {‘x‘: 274, ‘y‘: 274}
size = code_img_ele.size 
print(++,location)  # ++ {‘x‘: 274, ‘y‘: 274}
rangle = (int(location[x]),int(location[y]),int(location[x]+size[width]),int(location[y]+size[height]))
print(**,rangle)
bro.save_screenshot(aa.png)  # 快照
i = Image.open(./aa.png)
code_img_name = code.png
frame = i.crop(rangle)  #裁剪
frame.save(code_img_name)
 
chaojiying = Chaojiying_Client(‘超级鹰账号, ‘超级鹰密码, 软件ID)#超级鹰用户中心>>软件ID 生成一个替换上
im = open(./code.png,rb).read()
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])
    print(x)
    y = int(result.split(,)[1])
    xy_list = []
    xy_list.append(x)
    xy_list.append(y)
    all_list.append(xy_list)
print(all_list)  # [[24, 62], [40, 146], [112, 141]] 坐标位置
code_img = bro.find_element_by_xpath(//*[@id="loginForm"]/div/ul[2]/li[4]/div/div/div[3]/img)
action = ActionChains(bro)
 
for l in all_list:
    x = l[0]
    y = l[1]
    ActionChains(bro).move_to_element_with_offset(code_img,x,y).click().perform()
 
bro.find_element_by_id(username).send_keys() #12306账号
time.sleep(2)
bro.find_element_by_id(password).send_keys() #12306密码
time.sleep(2)
bro.find_element_by_id(loginSub).click()
time.sleep(10)
bro.quit()  # 退出

 

12306 的selenium实现模拟登陆

原文:https://www.cnblogs.com/zhangchen-sx/p/10826837.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!