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()

使用selenium模拟登录12306网站的更多相关文章

  1. 4 使用Selenium模拟登录csdn,取出cookie信息,再用requests.session访问个人中心(保持登录状态)

    代码: # -*- coding: utf-8 -*- """ Created on Fri Jul 13 16:13:52 2018 @author: a " ...

  2. 3 使用selenium模拟登录csdn

    之前通过F12开发者模式调试,获取网站后台服务器验证用户名和密码的URL之后,再构造post数据的方式会存在一个问题,就是对目标网站的验证机制不明确,构造post数据除了用户名和密码之外,还可能有更复 ...

  3. 使用Python+Selenium模拟登录QQ空间

    使用Python+Selenium模拟登录QQ空间爬QQ空间之类的页面时大多需要进行登录,研究QQ登录规则的话,得分析大量Javascript的加密解密,这绝对能掉好几斤头发.而现在有了seleniu ...

  4. selenium模拟登录豆瓣和qq空间

    selenium模拟登录豆瓣和qq空间今天又重新学习了下selenium,模拟登录豆瓣,发现设置等待时间真的是很重要的一步,不然一直报错:selenium.common.exceptions.NoSu ...

  5. 使用selenium模拟登录知乎

    网上流传着许多抓取知乎数据的代码,抓取它的数据有一个问题一定绕不过去,那就是模拟登录,今天我们就来聊聊知乎的模拟登录. 获取知乎内容的方法有两种,一种是使用request,想办法携带cookies等必 ...

  6. 12306 selenium 模拟登录

    # 下面是12306 实现的模拟登陆 # 解码 应用超级鹰,注册用户,左侧栏软件ID进去,开启一个新软件,拿到软件ID # 下面测试都在jupyter里面实现 # 超级鹰类 cell import r ...

  7. 验证码破解 | Selenium模拟登陆12306

    12306官网登录的验证码破解比较简单,验证码是常规的点触类型验证码,使用超级鹰识别率比较高. 思路: (1)webdriver打开浏览器: (2)先对整个屏幕截屏,通过标签定位找到验证码图片,并定位 ...

  8. 九、Python+Selenium模拟登录

    研究QQ登录规则的话,得分析大量Javascript的加密解密,比较耗时间.自己也是练习很少,短时间成功不了.所以走了个捷径. Selenium是一个WEB自动化测试工具,它运行时会直接实例化出一个浏 ...

  9. python模拟登录获取网站cookie

    因工作的需要需要使用某第三方网站页面的功能,但其网站未提供API,只有登录用户可使用该功能. 之前试过php使用snoopy获取set-cookie内容项进行手动拼装cookie,使用一段时间后发现网 ...

随机推荐

  1. 类似express的路由封装方式

    1.原理 主要过程涉及三个元素的定义,如下: //用于承载一系列方法的对象 var funObj = {}; //用于根据条件执行funObj中的方法 var app = function(){}; ...

  2. 爬取房价信息并制作成柱状图XPath,pyecharts

    以长沙楼盘为例,看一下它的房价情况如何url = https://cs.newhouse.fang.com/house/s/b91/ 一.页面 二.分析页面源代码 我们要获得的数据就是名字和价格,先来 ...

  3. eladmin-plus V2.0.0 发布,单表链式调用更丝滑

    一.项目简介 eladmin的mybatis-plus版本,单表使用链式调用,代码更简洁,调用更便捷.目前更新到2021年7月.项目基于 Spring Boot 2.4.2 . Mybatis-plu ...

  4. 素数(质数)(Java版)

    4.输出质数(素数) 素数(质数):是指在大于1的自然数中,除了1和它本身外,不能被其他自然数整除(除0以外)的数 public class PrimeNumber { public static v ...

  5. Docker run 命令参数及使用

    Docker run 命令参数及使用 Docker run :创建一个新的容器并运行一个命令 语法 docker run [OPTIONS] IMAGE [COMMAND] [ARG...] OPTI ...

  6. Mysql命令语句

    常用的管理命令 SHOW DATABASES;    //显示当前服务器下所有的数据库 USE 数据库名称;          //进入指定的数据 show tables;              ...

  7. anyRTC Web SDK 实现音视频呼叫功能

    前言 大家好,今天小编带给大家一个基于 anyRTC Web SDK 实现音视频呼叫的功能(本项目采用vue开发). 前提条件 在开始写代码之前还需要做一些准备工作,如果你之前没有使用过 anyRTC ...

  8. SQL语句(三)分组函数和分组查询

    目录 一.分组函数 特点 1. 各函数的简单使用 2. 搭配distinct的使用 3. COUNT 统计行数 4. 和分组函数一同查询的字段要求是group by后的字段 二.分组查询 1. 简单应 ...

  9. 2019.06.28 MERGE INTO备忘

    --保存主表 MERGE INTO dbo.DeliveryReceiving AS t USING @ReceiveMainDt AS s ON t.Id=s.id WHEN MATCHED THE ...

  10. Bypass D盾 Webshell

    测试环境 OS: Windows Server 2008 PHP: PHP 7.2.10 D盾: d_safe_2.1.5.4 绕过分析 我是以 eval($_POST['x']); 这个代码以根据, ...