自动化实现携程预约抢票

最近抢票风潮盛行,写了个脚本来抢票,有些地方需要手动,因为我是微信登录的,需要手机扫描二维码登录一下,还有手机号验证一下就ok了,其他不用自己手动,没有封装。。。。

1,单程票,首先把出发的城市,目的城市,日期,身份证人名字和身份证号,网址都以变量的形式展示,因为修改方便

2,打开火狐浏览器

3,获取当前窗口,因为微信登录会有一个扫描二维码的窗口弹出,是为了获取它,完事后关闭它

                                                            图1-1

4,以上的流程是,打开网址,点击登录,选择微信登录,手动去扫码,所以需要停个几秒时间,用足够的时间来登录,然后代码关闭这个,上边的窗口获取用来关闭该窗口,这个关闭了之后会弹出来手机验证,验证一次就不会出现了,所以代码没写

5,

该代码的意思是首先转换到微信扫描的窗体,然后再定位这个微信二维码就行,因为这个窗体上就一个微信二维码,只能定位它了,然后关闭这个就行了,定位的目的是确定是这个窗体

6,然后再把焦点放回主窗口,然后一步一步操作就行

 7,其中需要说明的是,

                                                                            图1-2

日历选中后那个弹窗只有点击一下其他地方或者空白处才可以,我这里是选择把下边那个广告给x掉,这样子那个日历就会消息,不会遮挡开始搜索按钮

8,重点:

因为日历是readonly格式的,也就是不能手动输入,那么我们需要做的就是把格式去掉,然后再进行内容清空,输入日期

9,完美

10,完整代码:

from selenium import webdriver

from selenium.webdriver.common.action_chains import ActionChains

import time

#出发城市

go_city='郑州'

#目的城市

aim_city='杭州'

#出发日期

go_date='2019-02-11'

#身份证名字

name='‘李四’#你名字

#身份证号

id_card='123444'#你的身份证号

url='http://www.ctrip.com/?sid=155950&allianceid=4897&ouid=pinP&gclid=CPi_sfm9wt8CFUJsvAod27QAQA&gclsrc=ds'

driver=webdriver.Firefox()

now_handle=driver.current_window_handle

print("第一个窗口"+now_handle)

driver.get(url)

login_element=driver.find_element_by_id('c_ph_login')

login_element.click()

wechat_element=driver.find_element_by_xpath('/html/body/div[3]/div[2]/div/div[1]/div[5]/div[2]/a[5]')

wechat_element.click()

time.sleep(10)

allhandles=driver.window_handles

print("all handles are")

for handle in allhandles:

if handle!=now_handle:

print(handle)

driver.switch_to.window(handle)

driver.find_element_by_xpath('/html/body/div/div/div[2]/div[1]/img')

time.sleep(5)

driver.close()

print(now_handle)

####################################################

#返回主窗口

driver.switch_to.window(now_handle)

print(now_handle)

time.sleep(5)

#点击头部导航栏中的火车

driver.find_element_by_id('nav_trains').click()

driver.find_element_by_id('notice01').send_keys(go_city)

driver.find_element_by_id('notice08').send_keys(aim_city)

#日期选择,因为是readonly形式的,所以不能直接输入

js1='document.getElementById("dateObj").removeAttribute("readonly")'

driver.execute_script(js1)

driver.find_element_by_id("dateObj").clear()

driver.find_element_by_id("dateObj").send_keys(go_date)

time.sleep(5)

#点击下边的广告关闭,目的是为了让日历的弹窗消失,这样才不会遮挡开始搜索按钮

driver.find_element_by_id('appd_wrap_close').click()

#点击开始搜索

driver.find_element_by_xpath('//*[@id="searchbtn"]').click()

time.sleep(3)

 

#滑动到底部开始选票

js="var q=document.documentElement.scrollTop=100000"

driver.execute_script(js)

time.sleep(5)

#开始选票

driver.find_element_by_xpath('/html/body/div[4]/form/div[7]/div[1]/div[7]/div[4]/div[18]/div[1]/div[6]/div[2]/a').click()

name_element=driver.find_element_by_xpath('/html/body/form/div[5]/div/div[1]/div[5]/div/div[2]/div/ul/li[2]/input')

ActionChains(driver).move_to_element(name_element)

#填写名字

name_element.send_keys(name)

#填写身份证号

driver.find_element_by_xpath('/html/body/form/div[5]/div/div[1]/div[5]/div/div[2]/div/ul/li[3]/input').send_keys(id_card)

#抢票

driver.find_element_by_id('btnhighqpbutton').click()

 

 

 

  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

保持可爱forever

赞赞赞

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值