本文就是大致讲解下使用selenium进行这个滑块验证码的拖动问题。

临时起意,看到了中国国际航空公司的官网,想试着采集下航班信息,发现官网是有不少难度的,操作也比较麻烦。

于是就用 fiddler 找了下国航的app接口。https://m.airchina.com.cn/ac/

于是我就直接开始采用selenium来进行页面信息采集。

我们要请求的接口是: https://m.airchina.com.cn/ac/c/invoke/qryFlights@pg
访问过去就是下图这个页面了。

当我们输入完出发地址和到达地址之后,点击查询,如图所示:

下面我们先用代码完成上述操作:

from selenium import webdriver
import time
driver = webdriver.Chrome(executable_path=r'C:\Users\lenovo\Desktop\chromedriver_win32\chromedriver.exe')
driver.get('https://m.airchina.com.cn/ac/c/invoke/qryFlights@pg')driver.find_element_by_id('orgCity').click()                                     #点击出发输入框
time.sleep(1)
driver.find_element_by_xpath(r'//*[@id="airport"]').send_keys('PEK')        #发送出发城市
time.sleep(2)
driver.find_element_by_class_name('citys').click()                      #点击确认输入的城市
time.sleep(2)
driver.find_element_by_id('dstCity').click()                       #点击到达输入框
time.sleep(2)
driver.find_element_by_id('airport').send_keys('CTU')         #确认到达城市
time.sleep(2)
driver.find_element_by_class_name('citys').click()    #点击确认到达的城市
time.sleep(2)
driver.find_element_by_id('subbtn').click()     #点击查询
time.sleep(3)

下面就开始核心内容了:
首先需要导入我们ActionChains

from selenium.webdriver import ActionChains

Action Chains类常用于模拟鼠标的行为,比如单击,双击,拖拽等行为

首先需要实例化,然后调用其中的方法,完成相应的操作。

action = ActionChains(driver)

点击滑块并进行拖动:

                action.click_and_hold(self, on_element=None).perform()action.move_by_offset(self, xoffset, yoffset).perform()

清楚鼠标痕迹:

  action.reset_actions()

方法其实很简单。

from selenium.webdriver import ActionChains
try:huakuai_id = driver.find_element_by_id('dx_captcha_basic_box_1')if huakuai_id:flag = 0try:while True:for i in [111,148,150,165,215]:            #图像缺口位置暂时人为给出time.sleep(1)huakuai = driver.find_element_by_id('dx_captcha_basic_slider-img-normal_1')   #获取滑块action = ActionChains(driver)                       #实例化ActionChainsaction.click_and_hold(huakuai).perform()     #点击滑块action.reset_actions()                          action.move_by_offset(int(i),0).perform()       #拖动time.sleep(0.7)                                                                       driver.find_element_by_class_name('captcha-bg').click()  #点击空白time.sleep(0.7)# action.reset_actions()if not huakuai_id:flag = 1breakif flag == 1:breakexcept:pass
except:pass
time.sleep(3)
doc = driver.page_source
print(doc)

我用python的moviepy做的gif 图片有点大,分开来发为…


=。=

完整代码:

from selenium import webdriver
import time
driver = webdriver.Chrome(executable_path=r'C:\Users\lenovo\Desktop\chromedriver_win32\chromedriver.exe')
driver.get('https://m.airchina.com.cn/ac/c/invoke/qryFlights@pg')driver.find_element_by_id('orgCity').click()
time.sleep(1)driver.find_element_by_xpath(r'//*[@id="airport"]').send_keys('PEK')
time.sleep(2)
driver.find_element_by_class_name('citys').click()
time.sleep(2)
driver.find_element_by_id('dstCity').click()
time.sleep(2)
driver.find_element_by_id('airport').send_keys('CTU')
time.sleep(2)
driver.find_element_by_class_name('citys').click()
time.sleep(2)
driver.find_element_by_id('subbtn').click()
time.sleep(3)
from selenium.webdriver import ActionChains
try:huakuai_id = driver.find_element_by_id('dx_captcha_basic_box_1')if huakuai_id:flag = 0try:while True:for i in [111,148,150,165,215]:time.sleep(1)huakuai = driver.find_element_by_id('dx_captcha_basic_slider-img-normal_1')action = ActionChains(driver)action.click_and_hold(huakuai).perform()action.reset_actions()action.move_by_offset(int(i),0).perform()time.sleep(0.7)driver.find_element_by_class_name('captcha-bg').click()time.sleep(0.7)# action.reset_actions()if not huakuai_id:flag = 1breakif flag == 1:breakexcept:pass
except:pass
time.sleep(3)
doc = driver.page_source
print(doc)

selenium模拟国航滑块验证码相关推荐

  1. Python + selenium自动化工具 + 滑块验证码+点选验证码,实现模拟登录“中国铁路网12306”

    文章目录 一.模拟登录"中国铁路网12306 1.引入库 2.初始化 3.将点选验证码图片,通过人工打码,返回目标像素位置(json格式). 4.点选验证码位置得到后,需要鼠标左击进行模拟人 ...

  2. selenium处理各类滑块验证码

    selenium处理各类滑块验证码 滑动验证码 案例展示 实现 滑块拼图验证码 案例展示 实现 滑块拼图验证码(Canvas) 案例展示 实现 滑动验证码 案例展示 这种只要用鼠标点击并移动指定距离就 ...

  3. 最新突破“淘宝”登录接口方法,隐藏selenium,攻克滑块验证码

    今日因为工作需要,需要抓取淘宝上一些商品详情信息,而商品详情信息必须要在登陆以后才能进行访问,所以想要抓取商品信息,模拟登陆是第一个必须要解决的问题. 淘宝的模拟登陆说难也不难,说不难,也蛮多坑的.今 ...

  4. python 滑块验证码_python selenium 淘宝滑块验证码 问题

    正常打开淘宝等页面,搜索商品和滑块验证码是没有问题的,但是用selenium打开,在多次翻页后出现的滑块验证码就总是失败,无论是手动滑还是代码控制都不可以,目前正在找解决办法... 此问题针对多次翻页 ...

  5. python 淘宝滑块验证_python selenium 淘宝滑块验证码 问题

    正常打开淘宝等页面,搜索商品和滑块验证码是没有问题的,但是用selenium打开,在多次翻页后出现的滑块验证码就总是失败,无论是手动滑还是代码控制都不可以,目前正在找解决办法... 此问题针对多次翻页 ...

  6. selenium模拟登陆截取验证码

    向百度大大下手吧... 大致思路 1.打开chrome 2.进入百度 3.点击登录 4.切换账号密码登录 5.尝试获取验证码截图(密码输错三次就可以出现验证码了) GKD from selenium ...

  7. selenium模拟geetest极验滑动验证

    前言 前一阵子打球认识了一个小学生,为了骗他钱,吹了好半天,什么盗取心上人的QQ密码,吃鸡外挂,学校饭卡无限充值,最终达成交易10块钱帮他刷QQ赞. 回家赶快百度研究了一下,原来刷赞很简单:很多网站都 ...

  8. selenium模拟登录示例

    案例1 登录B站 开发语言:Python3.6.5 框架: selenium自动化测试工具+Chrome浏览器 PIL图形处理库 实现逻辑: 使用selenium驱动Chrome浏览器,访问登录首页, ...

  9. python爬虫进阶-滑块验证码破解(bilibili)

    目标 如下图,利用selenium模拟拖动滑块完成验证 关键问题 我们知道selenium可以定位到用户名和密码,用send_keys可以实现输入账号密码.同样我们可以用selenium定位到滑块,用 ...

最新文章

  1. 用Python统计分析290种零食,谁能唤起80、90后的童年回忆?
  2. Windows Azure Mobile Services增加了对 Android的支持并扩展其适用范围至东亚地区
  3. VC++ 打开文件夹,保存文件等对话框的调用
  4. mysql 主从同步检查_MySQL主从复制一致性检测
  5. android -------- java虚拟机和Dalvik虚拟机
  6. JavaScript 里变量名前面加了大括号代表什么含义
  7. how2java_HOW TO:构造Java类的原型
  8. 英语中十二个月名称的由来
  9. Hibernate 语句总结
  10. 【BZOJ 3294】 3294: [Cqoi2011]放棋子 (DP+组合数学+容斥原理)
  11. gitHub报错10054、443解决办法
  12. 计算机基础网络空间安全,网络空间安全学院“首届计算机基础知识竞赛”圆满结束...
  13. 漫谈CRM体系化建设2 – 如何开发客户?
  14. 精选“数据分析”好问题汇总·第一期
  15. 国内APP消息推送机制以及微信消息延迟问题剖析
  16. 中国石油大学《物理化学》第三阶段在线作业
  17. 【Web】1326- 深入浅出 Web Audio API
  18. WINDOWS系统“资源管理器”进程选项关闭之后的解决方法
  19. 什么是根服务器?我国的根服务器发展如何?
  20. android5.0刷机,一加手机怎么升级安卓5.0 一加手机刷Android 5.0教程

热门文章

  1. java同学录_JSP同学录(jsp+javabean)
  2. Tomcat9启动闪退
  3. 2021全新出发!最新笔记汇总,量变导致质变,坚持记录!
  4. 轻JS逆向分析“攒经验”项目之某交易所Sign加密参数逆向分析
  5. linux network service not found,我自己调出来的,还有小学弟的帮忙。哈哈
  6. 三菱工控板底层源码_FX2N-20MT仿三菱PLC 国产PLC PLC板 PLC工控板 单片机控制板
  7. 基于TensorFlow的花卉识别
  8. 使用django实现某淘客网站采集功能
  9. 工具 好用的一些windows工具,包括git、录屏、ps、navicat等等,后续会持续更新
  10. php不能tmp,“c:\xAMPP\tMP\PHPE189.tMP”文件不存在或不可读。拉瓦维尔6