Python +硒+请求实现12306全自动抢票及验证码破解加自动点击功能

  

测试结果:
  

  

癙ython

  

整个买票流程可以再快一点,不过为了稳定起见,有些地方等待了一些时间

  

<强>完整程序,拿去可用

  

整个程序分了三个模块:购票模块(主体),验证码识别模块,余票查询模块

  

<>强购票模块:

        从硒进口webdriver   从selenium.webdriver.common.by进口   从selenium.webdriver。支持导入expected_conditions EC   从selenium.common.exceptions进口NoSuchElementException, StaleElementReferenceException ElementNotVisibleException   导入的时间   进口的要求   urllib。解析进口urlencode   从pyquery进口pyquery pq   从check_ticket进口检查   从验证导入代码   进口json   类Buy_Ticket ():   def __init__(自我、start_station end_station、日期、用户名、密码、目的):   自我。num=1   自我。开始=start_station   自我。结束=end_station   自我。日期=日期   自我。用户名=用户名   自我。密码=密码   自我。目的=目的   自我。login_url=' https://kyfw.12306.cn/otn/login/init '   自我。ticket_url=' https://kyfw.12306.cn/otn/leftTicket/init '   def登录(自我):   browser.get (self.login_url)   试一试:   input_name=browser.find_element_by_id(用户名)   input_pd=browser.find_element_by_id(密码)   按钮=browser.find_element_by_id (“loginSub”)   time . sleep (1)   input_name.send_keys (self.username)   input_pd.send_keys (self.password)   c=代码(浏览器)#调用验证码识别模块   c.main ()   button.click ()   time . sleep (2)   #等待页面跳转,如果验证码识别错误,就执行下面时的语句   当浏览器。current_url==自我。login_url +“#”:   c=代码(浏览器)   c.main ()   button.click ()   time . sleep (2)   # self.get_passenger ()   self.check ()   除了NoSuchElementException:   self.login ()   def检查(自我):   #调用余票查询模块   检查=检查(自我。目前为止,自我。首先,自我。最终,self.purpose)   start_end=check.look_up_station ()   自我。num=check.get_info ()   #饼干的添加,json.dumps把以汉字形式呈现的起始、终点站转化成unicode编码,可在审查元素里查看饼干   浏览器。add_cookie({“名称”:“_jc_save_fromStation”,“价值”:json.dumps self.start .strip (“”)。替换(' \ \ ',' % ')+ ' % 2 c + start_end [0]})   浏览器。add_cookie({“名称”:“_jc_save_toStation”,“价值”:json.dumps self.end .strip (“”)。替换(' \ \ ',' % ')+ ' % 2 c + start_end [1]})   浏览器。add_cookie({“名称”:“_jc_save_fromDate”,“价值”:self.date})   browser.get (self.ticket_url)   如果自我。目的=='学生”:   btn=browser.find_element_by_id (“sf2”)   time . sleep (1)   btn.click ()   按钮=browser.find_element_by_id (“query_ticket”)   time . sleep (1)   button.click ()   def book_ticket(自我):   打印(“开始预订车票……)   #先查找出所有车次对应的预订按钮,再根据余票查询模块返回的车次序号,点击相应的预订按钮   按钮=browser.find_elements_by_class_name (“btn72”)   按钮(self.num-1) .click ()   time . sleep (3)   button2=browser.find_element_by_id (normalPassenger_0) #按实际情况,可自行修改,这里就选择的第一个常用联系人,   #第二个是normalPassenger_1,依此类推   button2.click ()   button3=browser.find_element_by_id (“submitOrder_id”)   time . sleep (1)   button3.click ()   time . sleep(3) #等待页面加载完毕,不然后面可能会报错,等待时间自行决定   试一试:   button4=browser.find_element_by_id (“qr_submit_id”)   button4.click ()   除了ElementNotVisibleException:   button4=browser.find_element_by_id (“qr_submit_id”)   button4.click ()   打印('车票预定成功!请在30分钟内完成付款!”)   def主要(自我):   self.login ()   self.book_ticket ()   if __name__==癬_main__”:   开始=time.time ()   浏览器=webdriver.Chrome ()   b=Buy_Ticket(“上海”、“重庆',' 2018-09-18 ','账号”、“密码”、“成人”)#账号:密码自行修改   b.main ()   结束=time.time ()   打印(“总耗时:% d秒' % int (end-begin))   # browser.close ()      

验证码识别模块:

     

Python +硒+请求实现12306全自动抢票及验证码破解加自动点击功能