selenium模拟国航滑块验证码
2023-03-15 22:06:12 时间
本文就是大致讲解下使用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:UserslenovoDesktopchromedriver_win32chromedriver.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 = 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 图片有点大,分开来发为…
=。=
完整代码:
from selenium import webdriver
import time
driver = webdriver.Chrome(executable_path=r'C:UserslenovoDesktopchromedriver_win32chromedriver.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)
相关文章
- 金融服务领域的大数据:即时分析
- 影响大数据、机器学习和人工智能未来发展的8个因素
- 从0开始构建一个属于你自己的PHP框架
- 如何将Hadoop集成到工作流程中?这6个优秀实践必看
- SEO公司使用大数据优化其模型的5种方法
- 关于Web Workers你需要了解的七件事
- 深入理解HTTPS原理、过程与实践
- 增强分析:数据和分析的未来
- PHP协程实现过程详解
- AI专家:大数据知识图谱——实战经验总结
- 关于PHP的错误机制总结
- 利用数据分析量化协同过滤算法的两大常见难题
- 怎么做大数据工作流调度系统?大厂架构师一语点破!
- 2019大数据处理必备的十大工具,从Linux到架构师必修
- OpenCV中的KMeans算法介绍与应用
- 教大家如果搭建一套phpstorm+wamp+xdebug调试PHP的环境
- CentOS下三种PHP拓展安装方法
- Go语言HTTP Server源码分析
- Go语言HTTP Server源码分析
- 2017年4月编程语言排行榜:Hack首次进入前五十