使用selenium模拟登录12306网站
时间:2021-04-22
本文章向大家介绍使用selenium模拟登录12306网站,主要包括使用selenium模拟登录12306网站使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1 import yh 2 from selenium import webdriver 3 from PIL import Image 4 # from selenium.webdriver import ActionChains 5 # from selenium.webdriver import ActionChains 6 import time 7 from selenium.webdriver import ActionChains 8 bro = webdriver.Chrome(executable_path='./chromedriver') 9 bro.get('https://kyfw.12306.cn/otn/resources/login.html') 10 time.sleep(1) 11 #登录界面后点击账号密码登录 12 #查找标签 13 bro.maximize_window() #将浏览器最大化 14 # login = bro.find_elements_by_xpath('/html/body/div[2]/div[2]/ul/li[2]/a') 15 login = bro.find_element_by_xpath('/html/body/div[2]/div[2]/ul/li[2]') 16 login.click() 17 18 #save_screenshot对当前页面进行截图 19 bro.save_screenshot('./aaa.png') 20 21 #先找到验证码图片对应的标签 22 code_img_ele = bro.find_element_by_xpath('//*[@id="J-loginImg"]') 23 #确定验证码图片对应的左上角和右下角的坐标(裁剪的区域就确定了) 24 25 location = code_img_ele.location #验证码图片左上角的坐标 x y 26 print('location:',location) 27 size = code_img_ele.size #验证码对应的长和宽 28 print('size:',size) 29 30 #左上角和右下角的坐标 31 rangle = ( 32 int(location['x']), int(location['y']), int(location['x'] + size['width']), int(location['y'] + size['height'])) 33 #至此验证码图片区域就确定下来了 34 35 time.sleep(3) 36 i = Image.open('./aaa.png') 37 code_img_name = './code.png' 38 39 #crop根据指定区域进行图片裁剪 40 frame = i.crop(rangle) 41 frame.save(code_img_name) 42 43 #使用超级鹰进行坐标识别 44 result = yh.get_code('code.png',9004) 45 print(result) 46 47 all_list = [] #要存储即将被点击的点的坐标. [[x1,y1],[x2,y2],[x3,y3]] 48 if '|' in result: #有多个坐标的情况下进行保存 49 list_1 = result.split('|') #把返回的所有左边按照|进行分割 50 content_1 = len(list_1) #总共有多少个坐标的数量 51 for i in range(content_1): 52 xy_list = [] 53 x = int(list_1[i].split(',')[0]) #获取第i个坐标的x值 54 y = int(list_1[i].split(',')[1]) #获取第i个坐标的y值 55 xy_list.append(x) 56 xy_list.append(y) 57 all_list.append(xy_list) 58 59 else: #有一个坐标的情况下进行保存 60 x = int(result.split(',')[0]) 61 y = int(result.split(',')[1]) 62 xy_list = [] 63 xy_list.append(x) 64 xy_list.append(y) 65 all_list.append(xy_list) 66 print(all_list) 67 68 #遍历列表,使用动作链对每一个列表元素对应的x y 指定的位置进行点击操作 69 for l in all_list: 70 x = l[0] 71 y = l[1] 72 #实例化动作链对象,切换验证码页面,立即进行点击 73 ActionChains(bro).move_to_element_with_offset(code_img_ele,x,y).click().perform() 74 75 bro.find_element_by_id('J-userName').send_keys('15617567868') 76 time.sleep(2) 77 bro.find_element_by_id('J-password').send_keys('WCH19920816') 78 time.sleep(2) 79 bro.find_element_by_id('J-login').click() 80 time.sleep(3) 81 bro.quit()
原文地址:https://www.cnblogs.com/haoyujirui/p/14691563.html
- DeepLearning.ai学习笔记(三)结构化机器学习项目--week1 机器学习策略
- coursera 视频总是缓冲或者无法观看的解决办法
- DeepLearning.ai学习笔记(二)改善深层神经网络:超参数调试、正则化以及优化--week3 超参数调试、Batch正则化和程序框架
- DeepLearning.ai学习笔记(一)神经网络和深度学习--Week3浅层神经网络
- Andrew Ng机器学习课程笔记--week3(逻辑回归&正则化参数)
- Andrew Ng机器学习课程笔记--week1(机器学习介绍及线性回归)
- C++学习笔记之模板篇
- 计算机基础之计算机硬件系统
- 迭代器和生成器
- 函数相关知识汇总
- python编码问题一点通
- 数据类型总结(二)(列表,元组,字典)
- 数据类型总结(一)(数字,字符串)
- while补充,字符串和数字的内置方法
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法