Python:selenium登陆12306

云打码平台:超级鹰
规避浏览器selenium检测js:stealth.min.js
代码参考文章:csdn博主Yi_Kong
感谢Yi_Kong博主的文章
完整代码(自己输用户名,密码,软件ID)

#!/usr/bin/env python
# coding:utf-8
import requests
from hashlib import md5
from selenium import webdriver
from time import sleep
from PIL import Image
from selenium.webdriver import ActionChains
from selenium.webdriver.chrome.options import Options

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


if __name__ == '__main__':
    path = 'C:\Program Files (x86)\Google\Chrome\Application\chromedriver'
    # 规避浏览器selenium检测
    a = Options()
    a.add_experimental_option("excludeSwitches", ["enable-automation"])
    a.add_argument("--disable-blink-features=AutomationControlled")
    with open('./stealth.min.js') as f:
        js=f.read()
    # 实例化一个浏览器对象
    bro = webdriver.Chrome(path, options=a)
    bro.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument",   {"source": js})
    chaojiying = Chaojiying_Client('111111', '111111', '111111')	#用户中心>>软件ID 生成一个替换 96001
    url = 'https://kyfw.12306.cn/otn/resources/login.html' 
    # 窗口最大化
    bro.maximize_window()
    bro.get(url)
    sleep(2)
    log = bro.find_element_by_xpath('/html/body/div[2]/div[2]/ul/li[2]/a')
    log.click()
    sleep(1)
    # 截图获取验证码
    bro.save_screenshot('1.png')
    img = bro.find_element_by_xpath('//*[@id="J-loginImg"]')
    # 手动处理偏移
    px = 210
    py = 73
    location = img.location
    print(location)
    size = img.size
    print(size)
    rangle = (int(location['x'])+px,int(location['y'])+py,int(location['x'])+int(size['width'])+px+120,int(location['y'])+int(size['height'])+py+50)
    img1 = Image.open('1.png')
    img2 = img1.crop(rangle)
    img2.save('2.png')
    # 登录
    u = bro.find_element_by_xpath('//*[@id="J-userName"]')
    u.send_keys('111111')
    sleep(1)
    p = bro.find_element_by_xpath('//*[@id="J-password"]')
    p.send_keys('111111')
    sleep(1)
    #'''
    im = open('2.png', 'rb').read()													#本地图片文件路径 来替换 a.jpg 有时WIN系统须要//
    s = chaojiying.PostPic(im, 9004)['pic_str']										#1902 验证码类型  官方网站>>价格体系 3.4+版 print 后要加()
    # s = '260,183|346,180'
    print(s)
    s_list = s.split('|')
    for s in s_list:
        x = int(s.split(',')[0])
        y = int(s.split(',')[1])
        ActionChains(bro).move_to_element_with_offset(img,x-80,y-45).click().perform()
        sleep(1)
    login = bro.find_element_by_xpath('//*[@id="J-login"]')
    login.click()
    #'''
    # a = input('error:')
    # 滑块验证码
    sleep(4)
    slide = bro.find_element_by_xpath('//*[@id="nc_1_n1z"]')
    action = ActionChains(bro)
    action.click_and_hold(slide)
    action.move_by_offset(300, 0).perform()
    action.release()

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值