本文就是大致讲解下使用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. vb中的webrowser无法进行滑块验证_专题63 验证动量守恒定律
  2. 你以为没有CAD的前辈们画不出复杂的图纸?
  3. .net html5页面缓存,详解HTML5中的manifest缓存使用
  4. oracle scn与数据恢复,[Oracle] SCN与数据恢复的关系
  5. html引入vue不兼容ie11,关于vue.js:iview按需引入ie11不兼容报无效字符问题解决
  6. 新在互站上的校园跑腿/校园任务平台源码
  7. eclipse error
  8. linux终端python自动提示
  9. ORA-00911错误及解决方法(另附所有ora错误原因及解决方法 网址)
  10. mysql怎么添加默认约束_分享知识-快乐自己:MySQL中的约束,添加约束,删除约束,以及一些其他修饰...
  11. java 中的事物怎么配置_java – 在hibernate中如何以编程方式设置事务的隔离级别,或者如何创建具有不同隔离级别的两个事务...
  12. [PyTorch] torchvision库及其常用的函数
  13. 数据分析最难的就是怎样读懂数据!
  14. PythonHDF5目录
  15. SpringBoot读取自定义配置文件
  16. VSLAM算法(二):PnP求解 3D-2D 相机位姿及 BA优化算法
  17. “秃“如其来的植发经济是一门好生意吗?
  18. 466. 统计重复个数
  19. wstmart系统研究日志二
  20. C#读取Excel文件

热门文章

  1. LeetCode - 929 - 独特的电子邮件地址(unique-email-addresses)
  2. Excel字符串截取函数
  3. 新纪元出纳专用软件 v5.5 绿色
  4. unity md5加密
  5. 华为手机sd卡的根目录在哪_华为手机那么多系列,到底应该怎么选?哪一款更值得买?...
  6. 绘制一个五角星和六角形
  7. C 语言编译器 gcc 命令详解
  8. c/c++: bss data 段
  9. 域控ntp服务器配置,Win1216域控设置NTP服务器
  10. 解决Chrome浏览器检测不到HTCVIVE设备导致Three.js案例显示VR NOT SUPPORTED的问题