使用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 (设置复制格式)在新标签页打开所有图片链接在一个标签页显示所有图片链接
复选框 - 选中
复选框 - 取消
复选框 - 反选
单选框 - 选中
单选框 - 取消
特殊单选框 - 选中 无闻无问 发表于 2021-6-8 22:25
能用上超级鹰🦅的,都是大佬,我等就只有老老实实输验证码了…
哪有 只不过拾人牙慧罢了 做超级鹰的才是大佬 能用上超级鹰🦅的,都是大佬,我等就只有老老实实输验证码了… 超级鹰能识别图片中颠倒的汉字坐标吗 非常有用的功能支持下。 感谢分享 学习了 {:301_997:}{:301_997:}这个可以有, 感谢分享 感谢分享 学习了 都是大佬,我等就只有老老实实输验证码了
页:
[1]
2