前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >selenium模拟国航滑块验证码

selenium模拟国航滑块验证码

作者头像
李玺
发布2021-11-22 17:27:32
1.2K0
发布2021-11-22 17:27:32
举报
文章被收录于专栏:爬虫逆向案例爬虫逆向案例

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

在这里插入图片描述
在这里插入图片描述

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

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

在这里插入图片描述
在这里插入图片描述

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

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

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

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

代码语言:javascript
复制
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

代码语言:javascript
复制
from selenium.webdriver import ActionChains

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

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

代码语言:javascript
复制
action = ActionChains(driver)

点击滑块并进行拖动:

代码语言:javascript
复制
                action.click_and_hold(self, on_element=None).perform()
                action.move_by_offset(self, xoffset, yoffset).perform()

清楚鼠标痕迹:

代码语言:javascript
复制
  action.reset_actions() 

方法其实很简单。

代码语言:javascript
复制
from selenium.webdriver import ActionChains
try:
    huakuai_id = driver.find_element_by_id('dx_captcha_basic_box_1')
    if huakuai_id:
        flag = 0
        try:
            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)                       #实例化ActionChains
                    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 = 1
                        break
                if flag == 1:
                    break
        except:
            pass
except:
    pass
time.sleep(3)
doc = driver.page_source
print(doc)

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

=。=

在这里插入图片描述
在这里插入图片描述

完整代码:

代码语言:javascript
复制
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 = 0
        try:
            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 = 1
                        break
                if flag == 1:
                    break
        except:
            pass
except:
    pass
time.sleep(3)
doc = driver.page_source
print(doc)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-04-29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
验证码
腾讯云新一代行为验证码(Captcha),基于十道安全栅栏, 为网页、App、小程序开发者打造立体、全面的人机验证。最大程度保护注册登录、活动秒杀、点赞发帖、数据保护等各大场景下业务安全的同时,提供更精细化的用户体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档