利用selenium模拟登录12306,但是12306的登陆要想模拟还挺难的,需要先进行坐标识别,识别出来之后还要在进行滑块拖动验证识别,这里做一下记录.

这里的坐标识别是用的超级鹰,有时也会坐标识别出错,最后的一步滑动验证码识别现在做不了,不论是模拟滑动还是手动滑动都有问题。源代码如下(其中超级鹰的识别代码就不贴了)

from selenium import webdriver
from time import sleep
from PIL import Image
from selenium.webdriver import ChromeOptions  # 检测规避
from spider_basic.expand.chaojiying import verify_text# 检测规避
options = ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-automation'])brow = webdriver.Chrome(executable_path='./chromedriver.exe', options=options)
# 浏览器最大化操作,这里需要执行这个操作才能精确定位
brow.maximize_window()brow.get('https://kyfw.12306.cn/otn/resources/login.html')
login_account_bnt = brow.find_element_by_xpath('/html/body/div[2]/div[2]/ul/li[2]/a')
# 选择账号密码登录
login_account_bnt.click()
sleep(2)  # 这里需要停顿保证选择验证码已刷新出来# 填写用户名和密码
user = brow.find_element_by_xpath('//*[@id="J-userName"]')
user.send_keys('user')
pwd = brow.find_element_by_xpath('//*[@id="J-password"]')
pwd.send_keys('pwd')
brow.save_screenshot('./login.png')# 确定验证码图片区域
verifycode_elem = brow.find_element_by_id('J-loginImg')
location = verifycode_elem.location  # 验证码图片左上角的坐标
print('location:', location)
size = verifycode_elem.size
print('size:', size)# 刚开始把location_range写成了下面这样,我吐了
# range = (
#     int(location['x']) * 1.25, int(location['y']) * 1.25, int((location['x']) + size['width']) * 1.25,
#     int((location['x']) + size['width']) * 1.25
# )
location_range = (int(location['x']) * 1.25, int(location['y']) * 1.25, int((location['x']) + size['width']) * 1.25,int((location['y']) + size['height']) * 1.25
)# crop根据指定区域进行图片裁剪
i = Image.open('./login.png')
verifycode_img_name = 'verify.png'
frame = i.crop(location_range)  # 接受一个4元素的元组,分别是左上角坐标和右下角坐标
frame.save(verifycode_img_name)verify_data = verify_text(image_path=verifycode_img_name, type=9004)
# verify_text这里的这个函数就是超级鹰识别然后返回结果的函数
print(verify_data)pos = []
# if '|' in verify_data:  # 超过一个满足条件图片
total_list = verify_data.split('|')
for item_list in total_list:# x = int(item.split(',')[0])# y = int(item.split(',')[0])tmp_list = item_list.split(',')for item in tmp_list:val = int(item)pos.append(val)for i in range(len(pos) // 2):x = pos[i*2]y = pos[i*2+1]webdriver.ActionChains(brow).move_to_element_with_offset(verifycode_elem, x, y).click().perform()sleep(0.5)login_btn = brow.find_element_by_id('J-login')
login_btn.click()# 加入动作链
# div_tag = brow.find_element_by_xpath('//*[@id="nc_1_n1z"]')
#
# # 对div_tag进行滑动操作
# action = webdriver.ActionChains(brow)
# action.click_and_hold(div_tag)
#
# for i in range(6):
#     # perform 让动作链立即执行
#     action.move_by_offset(20,0).perform() #偏移x20像素,y0像素
#     sleep(0.1)
# action.release()
  • 刚开始元组location_range 中右下角的坐标写错了,造成截图偏离,被搞了很长时间。后面更正了,截出来了但还是有些歪,后面查资料发现要让页面最大化就行了。
  • 有时会出错说登陆按钮定位有问题,这个不知道是啥原因。
  • 最终有一次识别成功,但后面的滑块验证过不了,这个是反爬机制的原因,因为即使最后手动拖动也会提示出错

selenium模拟登录12306相关推荐

  1. python爬虫登录12306失败_Python网络爬虫(selenium模拟登录12306网站)

    一.通过selenium自动登录12306官网 1.1 超级鹰打码平台API,创建chaojiyin.py文件 #!/usr/bin/env python#coding:utf-8 importreq ...

  2. 模拟登录12306(selenium+超级鹰)

    最近迷上了用selenium去登陆各大网站,别说selenium真挺好用,可以轻松搞定ajax动态加载的网页,不用很费劲的去抓包查找.咳咳-跑题了,回归正题. 这次用selenium去登录12306网 ...

  3. python+selenium获取cookie session_Python Selenium模拟登录成功后,使用此cookie、利用requests库进行get时,提示“非法登陆”。...

    一. 步骤概述 a. 模拟登录学校选课系统(使用Selenium库登陆http://xk.suibe.edu.cn/xsxk/login.xk) b. 取得cookie后传入requests的sess ...

  4. selenium模拟登录豆瓣和qq空间

    selenium模拟登录豆瓣和qq空间 今天又重新学习了下selenium,模拟登录豆瓣,发现设置等待时间真的是很重要的一步,不然一直报错:selenium.common.exceptions.NoS ...

  5. 使用selenium模拟登录解决滑块验证问题

    本次主要是使用selenium模拟登录网页端的TX新闻,本来最开始是模拟请求的,但是某一天突然发现,部分账号需要经过滑块验证才能正常登录,如果还是模拟请求,需要的参数太多了,找的心累.不过好在TX的滑 ...

  6. python访问陌生人qq空间_使用Python+Selenium模拟登录QQ空间

    使用Python+Selenium模拟登录QQ空间 爬QQ空间之类的页面时大多需要进行登录,研究QQ登录规则的话,得分析大量Javascript的加密解密,这绝对能掉好几斤头发.而现在有了seleni ...

  7. Python selenium 模拟登录bilibili

    Python selenium 模拟登录bilibili ​ Selenium 是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样. ​ 在登录bil ...

  8. 越过验证码 selenium模拟登录B站项目实战(附源码)

    实战:selenium模拟登录B站 登录验证码处理 selenium 中的难点验证码破解因为确实没有很好的方式,一般都需要通过第三方平台实现破解,本案例中使用的是超级鹰平台(收费,大概1元30次,测试 ...

  9. selenium模拟登录淘宝

    基于selenium模拟登录淘宝读取cookie 1. from selenium import webdriver import time from selenium.webdriver.commo ...

最新文章

  1. Redis的启动和关闭(前台启动和后台启动)
  2. 【sprinb-boot】HttpServletResponse设置HTTP缓存
  3. java html 生成 pdf_Java实现HTML代码生成PDF文档
  4. TJU Problem 2857 Digit Sorting
  5. XCTF-高手进阶区:ics-06
  6. 李焕英是如何从不被看好到碾压唐探3的?
  7. python学生名片系统_基于python的学生信息管理系统!听说好多人的作业都是这个...
  8. javascript中call apply的区别
  9. 河南理工大学计算机学院课表,河南理工大学实验课课程表.doc
  10. 人脸标注工具源码解读
  11. python语言特点粘性扩展_【语言处理与Python】9.2处理特征结构\9.3扩展基于特征的文法...
  12. LVS负载均衡中arp_ignore和arp_annonuce参数配置
  13. 各版本的STP BPDU
  14. 深度学习中降低过拟合(OverFitting)的方法
  15. 推送MobPush-API说明
  16. 资料分析-增长率 比重 平均数 倍数等
  17. tomcat启动异常之信The APR based Apache Tomcat Native library which allows optimal performance in produ
  18. LCR测试仪与阻抗分析仪有何不同?测试软件怎么选?
  19. springboot大学生兼职网站开发与设计毕业设计源码311734
  20. PMS 包解析源码流程 - 修改定制应用icon

热门文章

  1. 猿创征文|我的四个月Java学习成长之路——从基础到框架再到项目
  2. java客户端带证书访问服务端_客户端与服务器SSL双向认证(客户端:java-服务端:java)...
  3. 关于注册Github不能通过验证的解决方法(easy,一定过)
  4. 电路中的过压保护和过流保护的区别
  5. Sketch教程|Sketch图层如何使用?如何使用Sketch画板?
  6. 一文看懂POE供电原理
  7. 圆柱模板行业B2B站点打造MIP推送+熊掌号推送+历史普通推送插件
  8. 分享Canvas简笔画小程序源码
  9. Linux 网络 I/O 模型简介(图文)
  10. VMware虚拟机centos6.5最小化安装以及配置网络