您现在的位置是:首页 > 技术教程 正文

appium移动端python大麦网抢票

admin 阅读: 2024-03-24
后台-插件-广告管理-内容页头部广告(手机)
  1. import time
  2. from datetime import datetime, timedelta
  3. from appium import webdriver
  4. from selenium.webdriver.common.by import By
  5. #from appium.webdriver.extensions.android.nativekey import AndroidKey
  6. """优化部分"""
  7. '''
  8. 需要预留弹窗line61
  9. *******************************appium响应过慢,需要提前启动appium***************************************
  10. '''
  11. """优化部分"""
  12. '''设置部分'''
  13. #初始化个人信息
  14. pre_tickets_name="蔡徐坤"
  15. audience_count=1
  16. #填写时间为24小时制
  17. main_hour =20
  18. main_minute =38
  19. '''设置部分'''
  20. desired_caps = {
  21. 'platformName': 'Android', # 被测手机是安卓
  22. 'platformVersion': '12', # 手机安卓版本
  23. 'deviceName': 'xxx', # 设备名,安卓手机可以随意填写
  24. 'appPackage': 'cn.damai', # 启动APP Package名称
  25. 'appActivity': '.launcher.splash.SplashMainActivity', # 启动Activity名称
  26. 'unicodeKeyboard': True, # 使用自带输入法,输入中文时填True
  27. 'resetKeyboard': True, # 执行完程序恢复原来输入法
  28. 'noReset': True, # 不要重置App
  29. 'newCommandTimeout': 6000,
  30. 'automationName' : 'UiAutomator2'
  31. # 'app': r'd:\apk\bili.apk',
  32. }
  33. #连接appium sever,初始化自动环境
  34. #Remote就是driver类的对象
  35. def start_get_ticket():
  36. driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
  37. #设置缺省时间
  38. #测试过程出现弹窗,需要修改,或者半人工,需要将隐式等待增长
  39. driver.implicitly_wait(9)
  40. ###开始自动化测试
  41. print("5s后开始自动化测试")
  42. time.sleep(5)
  43. driver.find_element(By.XPATH,'/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.LinearLayout[2]').click()
  44. search_box=driver.find_element(By.XPATH,'/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.RelativeLayout/android.widget.EditText')
  45. search_box.send_keys(pre_tickets_name)
  46. driver.find_element(By.XPATH,'/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.ViewFlipper/android.widget.FrameLayout/androidx.recyclerview.widget.RecyclerView/android.widget.RelativeLayout[1]/android.widget.TextView[2]').click()
  47. driver.find_element(By.XPATH,'/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.ViewFlipper/android.widget.LinearLayout/androidx.viewpager.widget.ViewPager/android.widget.FrameLayout/android.widget.FrameLayout/android.view.ViewGroup/androidx.recyclerview.widget.RecyclerView/android.widget.FrameLayout[1]/android.widget.LinearLayout').click()
  48. ###需要预留一个弹窗位置
  49. ###暂时认为需要半人工处理信息
  50. print("前置查找元素任务已经完成,接下来完成自动抢票任务")
  51. print("查找元素的任务已经完成,请接下来完成半人工任务:修改预售票的参数,时常20秒")
  52. time.sleep(20)
  53. print("即将开始抢票,正在等待售票时间的到来")
  54. # 获取当前时间并转换为北京时间
  55. utc_now = datetime.utcnow()
  56. beijing_now = utc_now + timedelta(hours=8)
  57. # 设置任务开始时间
  58. task_time = beijing_now.replace(hour=main_hour, minute=main_minute, second=0, microsecond=0)
  59. # 计算距离任务开始时间的时间差
  60. delta_time = task_time - beijing_now
  61. wait_seconds = delta_time.total_seconds()
  62. # 等待一定时间后执行任务
  63. time.sleep(wait_seconds)
  64. # 即将开始执行抢票任务的代码
  65. driver.implicitly_wait(2)
  66. """立即购买"""
  67. driver.find_element(By.XPATH,
  68. "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.FrameLayout[2]/android.widget.RelativeLayout/android.widget.FrameLayout/android.widget.LinearLayout").click()
  69. """确定"""
  70. driver.implicitly_wait(4)
  71. driver.find_element(By.XPATH,
  72. "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.LinearLayout[2]/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.TextView").click()
  73. """选择观众,1位或者2位"""
  74. if (audience_count == 1):
  75. driver.implicitly_wait(2)
  76. driver.find_element(By.XPATH,
  77. "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.RelativeLayout/androidx.recyclerview.widget.RecyclerView/android.widget.LinearLayout[1]/androidx.recyclerview.widget.RecyclerView/android.widget.LinearLayout[1]/android.widget.CheckBox").click()
  78. if (audience_count == 2):
  79. driver.implicitly_wait(2)
  80. driver.find_element(By.XPATH,
  81. "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.RelativeLayout/androidx.recyclerview.widget.RecyclerView/android.widget.LinearLayout[1]/androidx.recyclerview.widget.RecyclerView/android.widget.LinearLayout[1]/android.widget.CheckBox").click()
  82. driver.find_element(By.XPATH,
  83. "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.RelativeLayout/androidx.recyclerview.widget.RecyclerView/android.widget.LinearLayout[1]/androidx.recyclerview.widget.RecyclerView/android.widget.LinearLayout[2]/android.widget.CheckBox").click()
  84. """提交订单"""
  85. driver.implicitly_wait(2)
  86. driver.find_element(By.XPATH,
  87. "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.RelativeLayout/android.widget.LinearLayout[2]/android.widget.FrameLayout/android.widget.LinearLayout[2]/android.widget.TextView[3]").click()
  88. return 1
  89. if __name__=='__main__':
  90. if(start_get_ticket()):
  91. print("所有任务都完成")
  92. """
  93. logs
  94. finish in 2023/6/21/16:04
  95. """

使用appium不是一个很好的选择,而且也不一定能抢到票,由于没有学习逆向工程,所以这个只能使用这个框架,这个框架在界面中有轮播,播放的情况下,定位元素会十分慢,但是我周围的人确实能够手工抢到票,做这个的意义就是省去人工操作,最后提升下我的技能。

标签:
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

在线投稿:投稿 站长QQ:1888636

后台-插件-广告管理-内容页尾部广告(手机)
关注我们

扫一扫关注我们,了解最新精彩内容

搜索