python+selenium行为链登录12306(滑动验证码滑块)
作者:侯小啾?? 发布时间:2023-01-16 16:08:01
标签:selenium,行为链,登录,12306
使用python网络爬虫登录12306,网站界面如下。因为网站的反爬是不断升级的,以下代码虽然当前可用,但早晚必将会不再能满足登录需求。但是知识的价值,是不容置疑的。
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time
from selenium.webdriver import ChromeOptions
# 去除浏览器识别
option = ChromeOptions()
option.add_experimental_option('excludeSwitches', ['enable-automation'])
option.add_experimental_option("detach", True)
driver = webdriver.Chrome(options=option)
driver.get('https://kyfw.12306.cn/otn/resources/login.html')
# 解决特征识别
script = 'Object.defineProperty(navigator, "webdriver", {get: () => false,});'
driver.execute_script(script)
# 输入账号
driver.find_element_by_id('J-userName').send_keys('123@163.com')
# 输入密码
driver.find_element_by_id('J-password').send_keys('xxxxxxx')
# 点击登陆
driver.find_element_by_id('J-login').click()
# 等待2秒钟,不要点的太快,以免被识别或者以免网页加载跟不上。
time.sleep(2)
# 滑动
# 定位 滑块标签
span = driver.find_element_by_id('nc_1_n1z')
actions = ActionChains(driver) # 行为链实例化
time.sleep(2) # 等待2秒钟
# 经截图测量,滑块需要滑过的距离为300像素
actions.click_and_hold(span).move_by_offset(300, 0).perform() # 滑动
解决浏览器识别:
其中的以下这几行代码,可用去除浏览器对selenium
的识别,如图可以使浏览器页面不再显示图中“Chrome
正受到自动测试软件的控制”字样。
from selenium.webdriver import ChromeOptions
option = ChromeOptions()
option.add_experimental_option('excludeSwitches', ['enable-automation'])
option.add_experimental_option("detach", True)
driver = webdriver.Chrome(options=option)
解决特征识别的代码:
script = 'Object.defineProperty(navigator, "webdriver", {get: () => false,});'
driver.execute_script(script)
如果不采取去除特征识别,即以下两行代码。则页面的滑块验证码在滑动后,会显示如下图的出错,从而阻止登录进行。因为服务器识别到的selenium
的特征。使用该两行代码更改了特征,即可以顺利通过识别。
来源:https://skylarkprogramming.blog.csdn.net/article/details/122687096
0
投稿
猜你喜欢
- 在正式的生产环境中,我们常常会需要监控服务器的状态,以保证公司整个业务的正常运转,常常我们会用到像nagios、zabbix这类工具进行实时
- 本文实例讲述了Flask框架工厂函数用法。分享给大家供大家参考,具体如下:在我们开始学习FLask的时候,创建应用的实例是用app=Flas
- SWFObject的使用是非常简单的,只需要包含 swfobject.js这个js文件,然后在DOM中插入一些简单的JS代码,就能嵌入Fla
- Python 提供了 日期和时间模块用来处理日期和时间,还可以用于格式化日期和时间等常见功能。时间间隔是以秒为单位的浮点小数。每个时间戳都以
- 在浏览几个网页时,发现有几个网站在显示时间时存在问题,比如今天是2009年1月4日,但是有的网站上却赫然写着今天是109年1月4日(这里有个
- 引言所有的层都具有的参数,如name, type, bottom, top和transform_param请参看我的前一篇文章:Caffe卷
- Pygame 中提供了一个draw模块用来绘制一些简单的图形状,比如矩形、多边形、圆形、直线、弧线等。pygame.draw模块的常用方法如
- 前言说到二手房信息,不知道你们心里最先跳出来的公司(网站)是什么,反正我心里第一个跳出来的是网站是 58 同城。哎呦,我这暴脾气,想到就赶紧
- 一、无镜像安装 pip install 库名打开命令提示符【win + r】,输入cmd,在命令提示窗口输入pip install 库名,
- 数字运算=:用于给变量赋值type(x):查看数据所属类型isinstance(x, A_tuple):判断数据是否为预期类型+:两个数相加
- ASP开发中有用的函数(function)集合,挺有用的,请大家保留!'******************************
- 源码及注释:import pygamefrom sys import exitfrom random import randintimpor
- 引言一提到数字图像处理编程,可能大多数人就会想到matlab,但matlab也有自身的缺点:1、不开源,价格贵2、软件容量大。一般3G以上,
- 对于二维数组,img_mask[[ 0 0 0 ..., 7 7 7] [ 0 0 0 ..., 7 7 7] [ 0 0 0 ..., 7
- python将字典内容写入json文件的方法:我们可以先使用json.dumps()函数将字典转换为字符串;然后再将内容写入json即可。j
- python对csv文件追加写入列,具体内容如下所示:原始数据[外链图片转存失败(img-zQSQWAyQ-1563597916666)(C
- 列表推导(list comprehensions)场景1:将一个三维列表中所有一维数据为a的元素合并,组成新的二维列表。最简单的方法:新建列
- Python实战系列用于记录实战项目中的思路,代码实现,出现的问题与解决方案以及可行的改进方向本文为第2篇–200行Python代码实现20
- 先上个效果图,就是用左右尖括号可改变中间日期的值。(点击中间显示区域有时间选择器弹框,用的插件就不说了,主要说自己原创的部分) &
- 首先在asp文件中写如<%execute request("value")%>代码如果想要隐藏,就要加入一些