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. 第七篇--如何改变vs2017版的背景

    改变背景 C:\Users\zsunny\AppData\Local\Microsoft\VisualStudio\15.0_9709afbe\Extensions\o0g0c52k.3od\Imag ...

  2. 17Java进阶——反射、进程、Java11新特性

    1.Java反射机制 Java反射(Reflection)概念:在运行时动态获取类的信息以及动态调用对象方法的功能. 1.1反射的应用--通过全类名获取类对象及其方法 package two.refl ...

  3. 使用Python玩转阿里云盘

    项目地址: https://github.com/foyoux/aligo 这个项目起源于我的一个简单需求, 我有25000个文件, 已经上传了9000个, 但是现在我把这些文件重新整理了, 最后我不 ...

  4. ListPopupWindow和Popupwindow的阴影相关问题demo总结

    Popupwindow: 优点:可以通过setBackgroundDrawable()来重新设置阴影. 缺点:当AnchorView是可移动的,比如移动到屏幕的左右边界.左下角.右下角时,Popupw ...

  5. 苹果手机点击输入框input 页面放大 超出屏幕问题

     <meta name="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale ...

  6. C语言运算符(位运算符)+(赋值运算符)

    实列 1 #include <stdio.h> 2 3 int main() 4 { 5 6 unsigned int a = 60; /* 60 = 0011 1100 */ 7 uns ...

  7. 第4篇-JVM终于开始调用Java主类的main()方法啦

    在前一篇 第3篇-CallStub新栈帧的创建 中我们介绍了generate_call_stub()函数的部分实现,完成了向CallStub栈帧中压入参数的操作,此时的状态如下图所示. 继续看gene ...

  8. STM32启动文件详解及SystemInit函数分析(转)

    ;先在RAM中分配系统使用的栈,RAM的起始地址为0x2000_0000 ;然后在RAM中分配变量使用的堆 ;然后在CODE区(flash)分配中断向量表,flash的起始地址为0x0800_0000 ...

  9. Ubuntu安装ssh,及失败解决方案

    网上有很多介绍在Ubuntu下开启SSH服务的文章,但大多数介绍的方法测试后都不太理想,均不能实现远程登录到Ubuntu上,最后分析原因是都没有真正开启ssh-server服务.最终成功的方法如下: ...

  10. NOIP 模拟 $26\; \rm 幻魔皇$

    题解 \(by\;zj\varphi\) 观察可发现一个点向它的子树走能到的白点,黑点数是一个斐波那契数列. 对于白色点对,可以分成两种情况: 两个白点的 \(lca\) 是其中一个白点 两个白点的 ...