目录
一、说明
1.1、背景
又到了一年一度的春运时间,但总是抢不到票,让人烦躁。本次通过解决12306购票平台的登录问题,一步步完成12306自动化购票程序,以下内容为第一部分。
1.2、说明
操作系统:win 10
编辑器:pycharm edu
语言及版本:python 3.10
使用的库:selenium
实现思路:使用selenium模拟人的行为,进行自动化登录
识别图片验证码:超级鹰
浏览器下载与驱动的安装:Firefox下载与驱动安装
浏览器闪退说明:大概率是因为下载的浏览器和浏览器驱动版本不一致,建议使用搜索引擎查找大佬分享的内容解决
以下url不会放真实的,拿来测试注意识别并自行更改。
二、步骤
2.1、打开12306网址
driver = Firefox()
driver.get('请求的url')
2.2、输入账号与密码
driver.find_element(By.XPATH, '//*[@id="J-userName"]').send_keys('123456')
driver.find_element(By.XPATH, '//*[@id="J-password"]').send_keys('123456')
2.3、点击立即登录
driver.find_element(By.XPATH, '//*[@id="J-login"]').click()
2.4、拖动滑块认证
问题:
12306会进行反爬,检测selenium启动的浏览器webdriver是否为True,如果是的话,无论怎么拖动都会显示在来一次。
解决办法:
在查了很多资料后(网上大多是使用Chrome浏览器,火狐的很少,找得很艰难),找到了解决办法,在请求到url之后,进行一次前端的反弹,把webdriver设置为false即可。
script = 'Object.defineProperty(navigator,"webdriver",{get:()=>false,});'
driver.execute_script(script)
push_btu = driver.find_element(By.XPATH, '/html/body/div[1]/div[4]/div[2]/div[2]/div/div/div[2]/div/div[1]/div[2]/span')
ActionChains(driver).drag_and_drop_by_offset(push_btu, 500, 0).perform()
运行代码后,在控制台查看,结果为:
三、结果
3.1、运行结果
出现上图,说明已经成功登录,接下来就可以进行查票,购票的准备了。
四、本次小节
2023年,12306登录时,竟然不需要图片验证码了,准备的识别验证码没用上,但这也方便了许多。
本次自动化登录需要掌握的知识如下:
1)事件链;
2)selenium基本控件的使用、如点击、输入、拖动滑动条等。
以上内容是购票的第一部分,由于时间关系,之后会有直到完全实现自动购票的系列内容,完整源代码会在完全实现自动化购票时放出,欢迎进行批评指正。