splinter & chromedriver 模拟操作网页
PS: 也是从网上各个帖子中学习的Python,因此代码的格式以及内容有粘贴网上其他大神的代码,如有侵权请告知删除
以12306为例,粘贴的代码为部分代码,理解意思就好
1 模拟登录
登录网址:https://kyfw.12306.cn/otn/login/init
如上图所示,输入用户名的name为loginUserDTO.user_name,同理,输入密码的name为userDTO.password,因此用以下代码进行网页填充
#self是声明的类
self.driver.visit("https://kyfw.12306.cn/otn/login/init")
sleep(1)
self.driver.fill('loginUserDTO.user_name', "123456")
self.driver.fill('userDTO.password', "654321")
2 Chromedriver调用
self.driver = Browser(driver_name="chrome", executable_path="D:\\Program Files (x86)\\ChromeCore\\Chromedriver.exe)
3 输入买票信息,进行查询
如上图所示,买成都到长沙的火车,出发时间2020-01-20,开启网页开发者工具,点击查询
点击查询后,会发现这些信息,可以看到:
_jc_save_fromStation:出发站
_jc_save_toStation:到达站
_jc_save_fromDate:出发时间
所以,采用以下语句对这些选项进行填充
self.driver.cookies.add({"_jc_save_fromStation": "图中数值"})
self.driver.cookies.add({"_jc_save_toStation": "图中数值"})
self.driver.cookies.add({"_jc_save_fromDate": "图中数值"})
self.driver.reload()
4 选择出发的时间段,下拉菜单
elemt = self.driver.find_by_xpath('//select[@id="cc_start_time"]//option[@value="' + str(self.train_date) + '"]', ).first
elemt.click()
5 点击查询按钮
self.driver.find_by_text('查询').click()
6 看是否有符合要求的车辆信息
Details = self.driver.find_by_id('queryLeftTable')[0].find_by_xpath('//tr[starts-with(@id,"ticket_")]')
hile len(elems) == 0:
sleep(0.5)
Details = self.driver.find_by_id('queryLeftTable')[0].find_by_xpath('//tr[starts-with(@id,"ticket_")]')
7 查看搜索出的火车列表中,有没有座位(不区分席位类别)
self.seat_type_index = 0
for Current_Train in Details:
if (Current_Train.text == ''):
print('不介意座位种类情况下:没票')
continue
# 共有12个座位类型
for i in range(1,12):
if Current_Train.find_by_tag('td')[i].text != '--' or \
Current_Train.find_by_tag('td')[i].text != '无':
self.seat_type_index = i
break
if(self.seat_type_index == 0):
print('不介意座位种类情况下:无票')
continue
8 如果有票,进行预定
Current_Train.find_by_css('td.no-br>a')[0].click()
9 选择乘坐人
self.driver.find_by_text("AA").last.click()
10 其他还有提交订单,确认等步骤,不再描述
PS:
动态等待网页加载
# query_ticket为网页中的ID
wait_time('query_ticket')
来源:CSDN
作者:kaikai45
链接:https://blog.csdn.net/kaikai45/article/details/104050745