QingYi. 发表于 2021-6-8 22:19

使用Python来进行自动化登录12306

首先我们是需要打码平台的 我会发在代码里面 自己去注册,是免费使用的,自己看清楚index先


需要用到SeleniumChrome然后还需要自己安装一下selenium(pip install) 自己配置一下环境变量和驱动


直接上代码


main


#encoding=gbk
import time
from chaojiying import Chaojiying_Client
from selenium.webdriver import Chrome
from selenium.webdriver.common.action_chains import ActionChains
# 初始化超级鹰

chaojiying = Chaojiying_Client('username', 'password', '918082')

# 如果你的程序被识别到了怎么办?
# 1.chrome的版本号如果小于88在你启动浏览器的时候(此时没有加载任何网页内容), 向页面嵌入js代码. 去掉webdriver
web = Chrome()

# 在最后一步滑动拽动的时候会进行检测
# window.navigator.webdriver always is True
# 正常打开就是false 所以我们需要特殊处理一下

web.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
"source": """
   window.navigator.webdriver = undefined
    Object.defineProperty(navigator, 'webdriver', {
      get: () => undefined
    })
"""
})
web.get("https://kyfw.12306.cn/otn/resources/login.html")

time.sleep(3)
# 切换到账号密码登录
web.find_element_by_xpath('/html/body/div/div/ul/li/a').click()
time.sleep(3)

# 先处理验证码
# 找到图片的区域
ver_img = web.find_element_by_xpath('//*[@id="J-loginImg"]')
# 保存一下
dic = chaojiying.PostPic(ver_img.screenshot_as_png, 9004)
# 从返回的值里面找到需要点击的下标
res = dic['pic_str']
# 分割 这里大家可以自己输出一下 就知道了
res = res.split("|")
for r in res:
    # 分割 同上
    temp = r.split(",")
    # 拿到x y 坐标 因为他是字符串 先转数字
    x = int(temp)
    y = int(temp)
    # 移动到某个区域 然后再进行点击
    # 然后找到区域 进行偏移
    # 是事件链
    ActionChains(web).move_to_element_with_offset(ver_img, x, y).click().perform()

time.sleep(2)
# 账号密码 点击登录
web.find_element_by_xpath('//*[@id="J-userName"]').send_keys("12306_username")
web.find_element_by_xpath('//*[@id="J-password"]').send_keys('12306_password')
web.find_element_by_xpath('//*[@id="J-login"]').click()
time.sleep(1)
# 拖拽
move = web.find_element_by_xpath('//*[@id="nc_1_n1z"]')
ActionChains(web).drag_and_drop_by_offset(move, 300, 0).perform()



打码平台
#!/usr/bin/env python
# coding:utf-8

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


if __name__ == '__main__':
    # 用户中心>>软件ID 生成一个替换 96001
    chaojiying = Chaojiying_Client('username', 'password', '918082')
    # 本地图片文件路径 来替换 a.jpg 有时WIN系统须要//
    # im 图片的字节
    im = open('b.png', 'rb').read()
    # 1902 验证码类型官方网站>>价格体系
    print(chaojiying.PostPic(im, 1902))




在新标签打开所有链接复制所有链接URL复制所有链接URL(反向)复制所有链接标题 + URL复制所有链接标题 + URL (MD)复制所有链接标题 + URL (BBS)复制所有链接标题 + URL (筛选)复制所有链接标题 + URL (设置复制格式)在新标签页打开所有图片链接在一个标签页显示所有图片链接
复选框 - 选中
复选框 - 取消
复选框 - 反选
单选框 - 选中
单选框 - 取消
特殊单选框 - 选中

QingYi. 发表于 2021-6-8 22:26

无闻无问 发表于 2021-6-8 22:25
能用上超级鹰🦅的,都是大佬,我等就只有老老实实输验证码了…

哪有 只不过拾人牙慧罢了 做超级鹰的才是大佬

无闻无问 发表于 2021-6-8 22:25

能用上超级鹰🦅的,都是大佬,我等就只有老老实实输验证码了…

叶凯 发表于 2021-6-9 00:42

超级鹰能识别图片中颠倒的汉字坐标吗

bennyt 发表于 2021-6-9 01:17

非常有用的功能支持下。

zhengxinjun 发表于 2021-6-9 08:18

感谢分享 学习了

she383536296 发表于 2021-6-9 08:22

{:301_997:}{:301_997:}这个可以有,

ciker_li 发表于 2021-6-9 08:23

感谢分享

xiaolai1995 发表于 2021-6-9 08:47

感谢分享 学习了

cooleephone 发表于 2021-6-9 08:51

都是大佬,我等就只有老老实实输验证码了
页: [1] 2
查看完整版本: 使用Python来进行自动化登录12306