selenium滑块拖动验证(携程)

selenium滑块拖动验证

  • 1.前言
  • 2.环境
  • 3.代码
  • 谢谢你的浏览(End)

1.前言

大学三年第一次の博客,最后几个月记录下成长轨迹⑧。
备战2021年10月底金砖数据分析与可视化技术应用赛项,记录这个月学习的部分爬虫知识。
共勉ε≡٩(๑>₃<)۶
参考bolg:https://www.jianshu.com/p/954eeb0face9
实验网站:携程 (https://passport.ctrip.com/user/login?)

2.环境

python 3.8.7
selenium 3.141.0

3.代码

导入本次要用到的两个库webdriver和ActionChains

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains

导入驱动(本人使用的是谷歌浏览器所以导入的是谷歌驱动)

driver = webdriver.Chrome("chromedriver.exe")

设置等待时间

driver.implicitly_wait(20)

打开网页并使窗口最大化

driver.get("https://passport.ctrip.com/user/login?")
driver.maximize_window()

输入账号密码

account = "test"
password = "test"
driver.find_element_by_xpath('//*[@id="nloginname"]').send_keys(account)
driver.find_element_by_xpath('//*[@id="npwd"]').send_keys(password)

获取到滑块与滑块区域

btn= driver.find_element_by_xpath('//*[@id="sliderddnormal"]/div[1]/div[2]')
btn_area = driver.find_element_by_xpath('//*[@id="sliderddnormal"]')

执行拖动
这里使用到了ActionChains的drag_and_drop_by_offset方法
里面三个参数,分别是要拖动的元素、x与y轴的偏移量

ActionChains(driver).drag_and_drop_by_offset(btn,btn_area.size['width'],btn_area.size['height']).perform()

关于drag_and_drop_by_offset参数可以参考action_chains源代码

"""
        Holds down the left mouse button on the source element,
           then moves to the target offset and releases the mouse button.

        :Args:
         - source: The element to mouse down.
         - xoffset: X offset to move to.
         - yoffset: Y offset to move to.
        """

完整代码

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains

driver = webdriver.Chrome("chromedriver.exe")
driver.implicitly_wait(20)
driver.get("https://passport.ctrip.com/user/login?")
driver.maximize_window()

account = "test"
password = "test"
driver.find_element_by_xpath('//*[@id="nloginname"]').send_keys(account)
driver.find_element_by_xpath('//*[@id="npwd"]').send_keys(password)

slider = driver.find_element_by_xpath('//*[@id="sliderddnormal"]/div[1]/div[2]')
slider_area = driver.find_element_by_xpath('//*[@id="sliderddnormal"]')

ActionChains(driver).drag_and_drop_by_offset(slider,slider_area.size['width'],slider.size['height']).perform()

因为携程更新了反扒,所以执行完成后的结果应该如下
selenium滑块拖动验证(携程)_第1张图片
接下来的图片点击的验证我会后续完善(挖坑)

谢谢你的浏览(End)

你可能感兴趣的:(selenium,python,爬虫)