在家无聊,线代和高数看不懂,整点事情干,就准备预定回学校的高铁票,于是就有了这个文章
准备工作
1.pip安装chromediver,当然也可以手动解压(网上的教程好像没有提到pip,手动安装到C盘pycharm里面的Scripts就行了)
https://chromedriver.storage.googleapis.com/index.html这是chromedriver文件官网,在chrome里面设置查看自己的版本,然后找对应的版本就完了
2.注册个超级鹰,http://www.chaojiying.com/contact.html,挺厉害的打码平台,微信公众号绑定一下账号给1000积分,足够干12306验证码了
开始实战讲解
1.选择chrome打开12306然后切换到账号登录
默认是扫码登录
F12然后点击账号登录
3.复制xPath,/html/body/div[2]/div[2]/ul/li[2]/a
代码实现
from selenium.webdriver import Chrome
web = Chrome()
web.get('https://kyfw.12306.cn/otn/resources/login.html')
time.sleep(3)
web.find_element_by_xpath('/html/body/div[2]/div[2]/ul/li[2]/a').click()
2.下载验证码(截屏也可以)然后发送给超级鹰
超级鹰官网有个官方文档,下载然后pychram打开,其实就很简单,然后把账号密码改成你自己的,
from chaojiying import Chaojiying_Client
验证码需要时间加载,所以要sleep(3)就够了,
3.拿到坐标然后模拟点击
好像这个官方叫什么偏移量,挺高大上的,说白了就是建立一个坐标系,给个x,y然后点击就完了,默认左上方是原点
for pre_location in location_list:
#切割出来x,y坐标
location = pre_location.split(',')
x = int(location[0])
y = int(location[1])
ActionChains(web).move_to_element_with_offset(img,x,y).click().perform()
4.登录以后有个滑动验证
现在我还没有找到方法控制滑动速度,匀速运动,但是12306并没有因为这个验证失败
ActionChains(web).drag_and_drop_by_offset(button,340,0).perform()
button是那个滑块的Xpath,我记得好像是长度330,340肯定是够用了,那个0就是竖y的方向上的滑动
12306靠webdriver判断是不是爬虫
刚开始12306图片和滑动验证通过以后一直说验证失败,百思不得其解,百度发现是因为这个
这是正常页面下的,也就是我改了以后的,加一个这个代码,欺骗一下