ToB企服应用市场:ToB评测及商务社交产业平台

标题: Python爬虫之基于selenium实现12306模拟登录 [打印本页]

作者: 大连全瓷种植牙齿制作中心    时间: 2022-10-17 22:18
标题: Python爬虫之基于selenium实现12306模拟登录
参考:https://blog.csdn.net/m0_54490473/article/details/122751814

解决了个主要问题,滑块验证错误。

文件由:vscode 编写,浏览器驱动为 EDGE.
驱动下载地址:https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/
  1. # !/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. # @Author: Aixiu
  4. # @Time  : 2022/10/17 17:48:24
  5. from selenium import webdriver
  6. from selenium.webdriver.edge.service import Service
  7. # 无头Edge浏览器库及规避检测
  8. from selenium.webdriver.edge.options import Options
  9. # 导入动作链对应的类
  10. from selenium.webdriver import ActionChains
  11. import time
  12. # 创建一个参数对象,用来控制 Edge以无界面模式打开
  13. edge_options = Options()
  14. # 反检测设置 #
  15. # 规避被检测到的风险
  16. # 开启开发者模式
  17. # option = EdgeOptions()
  18. edge_options.add_experimental_option('excludeSwitches', ['enable-automation'])
  19. # 去掉:浏览器上方有“Chrome正受到自动测试软件的控制
  20. edge_options.add_experimental_option("detach", True)
  21. # 禁用启用Blink运行时的功能
  22. edge_options.add_argument('--disable-blink-features=AutomationControlled')
  23. # 将参数传给浏览器 (options=edge_options)
  24. bro = webdriver.Edge(service=Service('./msedgedriver.exe'), options=edge_options)
  25. bro.get('https://kyfw.12306.cn/otn/resources/login.html')
  26. # 解决特征识别, 用来解决滑块出错,验证问题
  27. script = 'Object.defineProperty(navigator, "webdriver", {get: () => false,});'
  28. bro.execute_script(script)
  29. # 根据id获取用户账号输入框、密码输入框,并输入账号密码
  30. time.sleep(2)
  31. username_tag = bro.find_element(by='id', value='J-userName').send_keys('改为你的用户名')
  32. time.sleep(2)
  33. password_tag = bro.find_element(by='id', value='J-password').send_keys('改为你的密码')
  34. # 根据id获取登录按钮并点击
  35. login_btn = bro.find_element(by='id', value='J-login').click()
  36. # 尽量休眠长一点,不然,代码难以定位到滑块
  37. time.sleep(2)
  38. span = bro.find_element(by='id', value='nc_1_n1z')
  39. # 定义动作链,点击并拖拽
  40. aco = ActionChains(bro)
  41. # 点击并长按
  42. aco.click_and_hold(span)
  43. #perform()立即执行动作链操作
  44. for i in range(10):
  45.     aco.move_by_offset(36,0).perform()
  46.     time.sleep(0.3)
  47.    
  48. # 释放动作链
  49. aco.release()
  50. time.sleep(2)
  51. # 点击登录后的弹窗 确定 按钮
  52. ok_btn = bro.find_element(by='class name', value='ok').click()
  53. time.sleep(5)
  54. bro.quit()
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4