整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

如何让用户选择是否离开当前页面?「JS篇」

如何让用户选择是否离开当前页面?「JS篇」




者: Peter酱

转发链接:https://mp.weixin.qq.com/s/o-YqWroltD_JISwQJasWZQ

近几年比较流行的一种验证方式就是拖动验证,可以在一定程度上避免过去验证码被破解的尴尬,下面小编就为大家分享一下这个验证方式的js代码

$.fn.drag=function(options){

var x, drag=this, isMove=false, defaults={

};

var options=$.extend(defaults, options);

//添加背景,文字,滑块

var html='<div class="drag_bg"></div>'+

'<div class="drag_text" onselectstart="return false;" unselectable="on">拖动滑块验证</div>'+

'<div class="handler handler_bg"></div>';

this.append(html);

var handler=drag.find('.handler');

var drag_bg=drag.find('.drag_bg');

var text=drag.find('.drag_text');

var maxWidth=drag.width() - handler.width(); //能滑动的最大间距

//鼠标按下时候的x轴的位置

handler.mousedown(function(e){

isMove=true;

x=e.pageX - parseInt(handler.css('left'), 10);

});

//鼠标指针在上下文移动时,移动距离大于0小于最大间距,滑块x轴位置等于鼠标移动距离

$(document).mousemove(function(e){

var _x=e.pageX - x;

if(isMove){

if(_x > 0 && _x <=maxWidth){

handler.css({'left': _x});

drag_bg.css({'width': _x});

}else if(_x > maxWidth){ //鼠标指针移动距离达到最大时清空事件

dragOk();

}

}

}).mouseup(function(e){

isMove=false;

var _x=e.pageX - x;

if(_x < maxWidth){ //鼠标松开时,如果没有达到最大距离位置,滑块就返回初始位置

handler.css({'left': 0});

drag_bg.css({'width': 0});

}

});

handler.ontouchstart(function(e){

isMove=true;

x=e.pageX - parseInt(handler.css('left'), 10);

});

//鼠标指针在上下文移动时,移动距离大于0小于最大间距,滑块x轴位置等于鼠标移动距离

$(document).ontouchmove(function(e){

var _x=e.pageX - x;

if(isMove){

if(_x > 0 && _x <=maxWidth){

handler.css({'left': _x});

drag_bg.css({'width': _x});

}else if(_x > maxWidth){ //鼠标指针移动距离达到最大时清空事件

dragOk();

}

}

}).ontouchend(function(e){

isMove=false;

var _x=e.pageX - x;

if(_x < maxWidth){ //鼠标松开时,如果没有达到最大距离位置,滑块就返回初始位置

handler.css({'left': 0});

drag_bg.css({'width': 0});

}

});

//清空事件

function dragOk(){

handler.removeClass('handler_bg').addClass('handler_ok_bg');

text.text('验证通过');

drag.css({'color': '#fff'});

handler.unbind('mousedown');

$(document).unbind('mousemove');

$(document).unbind('mouseup');

}

};

喜欢就订阅关注我吧,小编不定期分享前端的各种小知识哦

来 源:志斌的python笔记

作 者:志斌



随着时间的推移,技术的进步,字符验证码越来越容易被破解,所以,开发者开发了一种新的反爬虫方式——滑块验证码反爬虫,来限制爬虫程序。


今天来跟大家分享一下如何解决验证码反爬虫中的滑块验证码反爬虫。


原理


网站开发者们认为可以从行为方面来区别人类和计算机。例如:人们可以自由的完成拖拽、按下和释放鼠标等操作,但是计算机却不可以。


破解


01

观察滑块和轨道的长度


我们首先要打开网页的开发者模式,来看一下滑块和轨道的长度分别是多少。

滑块长度

轨道长度

从上面我们知道了滑块的长度是50,轨道的长度是390,也就是说,滑块需要滑动的距离是340。

02

模拟滑动


在上面我们已经知道滑块要滑动的距离了,那么我们现在就可以开始尝试模拟滑动了。这里我们使用Selenium来完成滑块滑动的工作。

关于Selenium库的安装、配置和使用方法,可以看一下这篇文章学会Selenium,实现真正的可见即可爬!

模拟滑动主要分为以下两步:

1. 将鼠标定位到滑块位置


我们打开开发者模式,对滑块进行检查发现,滑块的class属性是hover,所以定位代码如下:

from selenium import webdriver
driver=webdriver.Chrome(r'chromedriver.exe')
url='http://www.porters.vip/captcha/sliders.html#'
driver.get(url)
hover=driver.find_element_by_css_selector('.hover')

2. 移动鼠标到轨道终点

Selenium库中有一个ActionChains模块,它可以模拟鼠标按住滑块进行移动,然后进行释放等操作,很符合我们的需求。代码如下:

from selenium import webdriver
import time
move=webdriver.ActionChains(driver)
move.click_and_hold(hover).perform()
time.sleep(1)
move.move_by_offset(340,0)
time.sleep(1)
move.release().perform()


小结


1. 本文详细介绍了滑块验证码反爬虫的原理和破解方法。
2. 滑块验证码是现在比较流行的一种验证码反爬虫,所以大家如果想成为一名爬虫工程师,那这是一个必备技能。
3. 破解滑块验证码主要分两步:一、计算出滑块要滑动的距离;二、让滑块进行移动。
4. 本文仅供学习参考,不做它用。

END

留言赠书



爱数据教育与北京大学出版社联合开展 “ 留言送书 ” 活动,本次为大家选择的书籍为:人工智能数学基础


【内容简介】

本书以零基础讲解为宗旨,面向学习数据科学与人工智能的读者,通俗地讲解每一个知识点,旨在帮助读者快速打下数学基础。

第1 篇:数学知识基础篇
主要讲述了高等数学基础、微积分、泰勒公式与拉格朗日乘子法。

第 2 篇:数学知识核心篇
主要讲述了线性代数基础、特征值与矩阵分解、概率论基础、随机变量与概率估计。

第 3 篇:数学知识提高篇
主要讲述了数据科学的几种分布、核函数变换、熵与激活函数。

第 4 篇:数学知识应用篇
主要讲述了回归分析、假设检验、相关分析、方差分析、聚类分析、贝叶斯分析等内容。

【作者简介】

唐宇迪,计算机专业博士,网易云课堂人工智能认证行家,51CTO学院讲师,CSDN博客专家。

李琳,河南工业大学副教授,在软件工程、机器学习、人工智能和模式识别等领域有深入研究。

侯惠芳,教授,解放军信息工程大学通信与信息系统专业博士,擅长机器学习、大数据检索、人工智能和模式识别等。

王社伟,河南工业大学副教授,西北工业大学航空宇航制造专业博士,挪威科技大学访问学者,对数字化制造、企业管理系统、机器学习、数据挖掘等有丰富的实战经验。



本次福利活动将选取留言最走心的1位粉丝免费赠送上述书籍。下周日公布中奖者及书籍领取方式。期待大家的留言~


【上周中奖者公布】


我们会私下联系你收集信息地址进行邮寄,注意查收,收到书籍后欢迎反馈哦~