12306登录自动过滑块

from selenium.webdriver import Edge
from selenium.webdriver.common.by import By
# 操作链
from selenium.webdriver import ActionChains

# 12306登录会检测,检测一些selenium特征,最主要的是window.navigator.webdriver
# 再打开网站之前,先加载一段js代码
# cdp 命令
# cdp 全称是:Chrome Devtools-Protocol
# 通过 addScriptToEvaluateOnNewDocument() 方法可以在页面还未加载之前,运行一段脚本。
# 如此,我们只需要提前设置:
# window.navigator.webdriver 的值为 undefined 即可。
web = Edge()
web.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
    "source": """
     Object.defineProperty(navigator, 'webdriver', {
      get: () => undefined
   })
   """
})

web.get('https://kyfw.12306.cn/otn/resources/login.html')
web.implicitly_wait(1)  # 增加隐式等待 ,一直等待整个页面加载完成,直到超时

# 输入账号密码
web.find_element(By.XPATH, '//*[@id="J-userName"]').send_keys('123123123')
web.find_element(By.XPATH, '//*[@id="J-password"]').send_keys('123123123')
# 点击登录
web.find_element(By.XPATH, '//*[@id="J-login"]').click()

web.implicitly_wait(1)
# 创建ActionChains对象(操作链)
action_chains = ActionChains(web)
# 按钮
button = web.find_element(By.XPATH, '//*[@id="nc_1_n1z"]')
# 拖动按钮到指定位置(右300)
action_chains.drag_and_drop_by_offset(button, 300, 0)
# 提交事件
action_chains.perform()
posted @ 2023-03-07 12:54  0x1e61  阅读(37)  评论(0编辑  收藏  举报