文地址:github.com/ruizhengyun… 作为前端新人,我们常以菜鸟自居,主要是专业程度不高,还有就是自谦。其实,作为菜鸟的我们也想撕掉这类标签,我们也努力,可还是学不好前端,是真的不适合做这行还是方法不对,没人告诉我们?如果你觉得自己还处在菜鸟阶段的迷茫区,那可以看看本篇文章,希望看完之后你能得到想要的。如果你要阐述你的想法,请在评论区留下你的文字。
前端路上我们都会碰到这类情景:现有技术体系已经很庞大了,还没学个遍,新技术又频繁涌出,发现有太多太多东西要学,隐隐有点学不动的趋势。不知不觉就在这条路上迷茫了,发现自己原来那么渺小。正所谓登高极目,知天地之大;置己苍茫,知寸身之微。
我的逻辑是:现实我们是改变不了了,我们能掌握的是改变自己的学习方法和思维逻辑。我们常说万变不离其宗,对于前端来说,这个宗我的理解就是 html + css + js。
建体系。将现有知识做个体系架构,然后将市场上前端技术点填入到这个体系架构中,不管新出现的知识是怎样的,都在这个体系架构内,无非是对架构的补充或完善(新增和修改),我们要做的不就不断完善这个体系架构,体系架构可参考《8年前端知识点沉淀》;
深入。在每个分类中择其一,然后深耕;
浅出。用自己的语言将深耕的知识点输出出来,可以文字,可以声音(分享);
不管现在处于初级、中级、高级、资深还是大前端阶段,学习的通用方法大抵如此,当然小异部分我会在各个阶段单独指出。以上纯属个人观点,如有补充和指正可按文章开头方法在评论区评论(即 github 上登录后评论)。
学习方法
代码管理
2.利用 gitbook 库来打包成小书,然后利用 github 自带功能生成在线的,然后自己没事的时候,看看自己学的东西,然后再查缺补漏,不断完善; 3.学习文档用 markdown 语法来写,养成写文档的好习惯,对于为什么写文档和项目开发中前端需要写哪些文档,我会在后续的文章中阐述,这里不展开; 4.编码工具可用 Vscode,整个目录可参考
前端基础
HTML5 + CSS2.1
这部分建议在 w3school 在线教程或MDN 上学习,边学边练,学习过程中请打开 chrome 浏览器调试工具,辅助学习和调试。
ECMAScript
这部分学的内容会很多,如果没有编程语言的基础的话,会吃些力。建议先在 w3school 在线教程或MDN 上学习。
犀牛书《javascript语言精粹》或红宝书《Javascript 高级程序设计》,前期看其中的一本就好,这个时候你可以建仓库 ecmascript-note 了;
数据结构和算法
实践开发中,和后端提供的接口交互以及前端自身的逻辑处理,然后将数据渲染到页面,往往离不开数据结构和算法这块的知识。
前端初级
CSS
有了 CSS 基础知识,还需要继续深入,了解
css3 规范;
预编译语言:less 或 sass;
只有经历这个过程,你才会发现 less 的美。看完这块,你的了解选择器、盒模型、弹性布局、媒体查询等概念。
ECMAScript
Zepto.js 或 jQuery.js。完成一些简单项目,熟悉 API;
推荐小黄书《你不知道的 JS》上中下三册;
ES5 知识点掌握,能区分 ES5 与 ES3 常用的一些知识点;
ES6 常用的一些知识点,暂时不推荐阮一峰老师的 ES6 教程,太多了,怕你会迷茫和陷入无聊区,找一些总结小书(一些常用的 ES6 语法总结)看看,一直想写,没时间;
常用概念(面试也会碰到)弄清楚。比如变量作用域、传递方式、执行上下文、闭包、apply/call/bind、this 指向等;
网络编程。Ajax、fetch、websocket、cors、jsonp、formData等知识。
浏览器
常用跨域;
存储机制;
性能
常用性能优化;
安全
了解 XSS 和 CSRF 攻击;
正则表达式
基础知识,视频或一些文档,此刻不建议看官方文档;
常用正则表达式会写;
工程化
npm 常用命令和简单应用;
git 常用命令和简单应用;
webpack 能搭建一个应用;
React.js
对于面前前端三大框架,大家都不陌生了。建议择其一,然后了解入门知识。我安利的是 React.js,个人倾向,无外乎其他。主要学习中英文官网入门知识。结合 create-react-app 脚手架。
Node.js
基础知识;
express 或 koa2 简单应用;
说明:上面学习内容不求学完都记得,能掌握 70%-80% 就可以了,主要有个先入为主的概念,以后碰到这类问题,知道怎么去描述问题,培养独立解决问题的能力。
最后,祝你好运。有什么补充,请按文章看头说的方法给出你的想法。
、html部分
1.取消iPhone自动识别数字为拨打号码
<meta name = "format-detection" content = "telephone=no">
2.移动开发、响应式布局
<meta name="viewport" content="width=device-width initial-scale=1.0 maximum-scale=1.0 user-scalable=yes"/>
二、css部分
1.字母强制大写
text-transform: uppercase;
2.解决iPhone中overflow:scroll;滑动速度慢或者卡的问题
-webkit-overflow-scrolling: touch;
3.防止复制,兼容主流浏览器
-moz-user-select : none;
-webkit-user-select: none;
4.固定背景图片
background-attachment: fixed;
5.去除iphone input默认样式
input {
-webkit-appearance:none;
}
-webkit-appearance 可用于渲染input风格,多用于移动端,有兼容性问题,请自行百度
6.设置表格的边框合并为一个单一的边框
border-collapse:collapse;
7.添加(显示)IOS下滚动条
.box::-webkit-scrollbar{
-webkit-appearance: none;
width: 14px;
height: 14px;
}
.box::-webkit-scrollbar-thumb{
border-radius: 8px;
border: 3px solid #fff;
background-color: rgba(0, 0, 0, .3);
}
8.文字超出部分省略号隐藏
.box{
width: 200px;
/** 单行显示隐藏 **/
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
/** 多行显示隐藏 **/
word-break: break-all;
text-overflow: ellipsis;
display: -webkit-box; /** 对象作为伸缩盒子模型显示 **/
-webkit-box-orient: vertical; /** 设置或检索伸缩盒对象的子元素的排列方式 **/
-webkit-line-clamp: 3; /** 显示的行数 **/
overflow: hidden; /** 隐藏超出的内容 **/
}
9.设置表格布局(我都不知道为什么我的笔记.txt里面会有这个...)
table{
table-layout:fixed;
}
10.如果想鼠标移动上去时显示被隐藏的文本内容,可以设置
.box:hover {
text-overflow:inherit;
overflow:visible;
}
11.css实现选中checkbox,文字内容颜色变化
<style> .tgl-light + .tgl-btn { background: #f0f0f0; border-radius: 2em; padding: 2px; -webkit-transition: all .4s ease; transition: all .4s ease; } .tgl-light + .tgl-btn:after { border-radius: 50%; background: #fff; -webkit-transition: all .2s ease; transition: all .2s ease; } .tgl-light:checked + .tgl-btn { background: #9FD6AE; } </style> <div class='tg-list-item'> <input class='tgl tgl-light' id='cb1' type='checkbox'> <label class='tgl-btn' for='cb1'>11111111111</label> </div>
想要学习或者了解web前端编程的小伙伴,可以私信小编【学习】web前端海量知识分享,欢迎初学和进阶中的小伙伴。
应该都很熟悉
点击滑块然后移动到图片缺口进行验证
现在越来越多的网站使用这样的验证方式
为的是增加验证码识别的难度
那么
对于这种验证码
应该怎么破呢
接下来就是
打开 b 站的登录页面
https://passport.bilibili.com/login
image
可以看到登录的时候需要进行滑块验证
按下 F12
进入 Network
看下我们将滑块移到缺口松开之后做了什么提交
可以看到是一个 GET 请求
但是
这请求链接也太特么长了吧
我们来看看请求的参数是怎么样的
哇靠
gt?
challenge?
w?
这些都是什么鬼参数
还加密了
完全下不了手啊
既然以请求的方式不好弄
我们从它们的源代码入手
看看有什么突破口
回到 b 站的登录页
按下 F12
进入 Element
然后点击滑块出现了图片
定位一下
发现有两个 a 标签
一个 class 是 gt_bg gt_show
一个 class 是 gt_fullbg gt_show
和小帅b想的一样
这个验证码应该是有两张图片
一张是完全的背景图片
一张是缺口的图片
那把这两张图片下载下来对比一下不就行了
打开 a 标签一看
一张图片被切割成很多小块
原来这张图片是拼出来的
我们看看原始图片是怎么样的
记得私信小编【学习】领取Python学习教程哦。
什么乱七八糟的
再仔细看下源代码
原来是在同一张图片通过偏移量合成了一张完整的图片
background-position: -277px -58px;
看了一下缺口的图片也是如此
到这里
我们的第一个思路就是
下载这两张原始图片
然后通过偏移量合成两张真正的图片
背景图
image
缺口图
↓变身
那么怎么做呢?
因为我们还要模拟滑动滑块
所以呢
我们要用到selenium
打开b站的登录页
然后等到那个滑块显示出来
# 获取滑块按钮
接下来我们就获取页面的源码
driver.page_source
然后使用bs 获取两张原始背景图片的 url
bs = BeautifulSoup(driver.page_source,'lxml')
拿到了图片地址之后
将图片下载下来
# 将图片格式存为 jpg 格式
ok
我们已经把两张原始图片下载下来了
那么接下来就是要合成图片了
我们要根据图片的位置来合成
也就是源码中的 background-position
获取每一个小图片的位置
我们可以通过字典的形式来表示这些位置
然后将数据放到列表中
# 存放每个合成缺口背景图片的位置
那么
现在我们已经有了原始图片
还知道了每个位置应该显示原始图片的什么部分
接下来我们就写一个方法
用来合成图片
# 写入图片
那么问题又来了
怎么合成啊
我们再看看一开始分析的图片
这里图片被分割成的每一个小图片的尺寸是
10 * 58
所以我们也要将我们刚刚下载的原始图片切割成相应的尺寸大小
而且
这张图片是由上半部分的小图片和下半部分的小图片合成的
所以我们定义两个 list 来装这些小图片
# 存放上下部分的各个小块
然后将原始的图片切割好放进去
image = Image.open(image_file)
至此
我们这两个 list 就分别放好了各个切割的图片了
那么接下来就创建一张空白的图片
然后将小图片一张一张(间距为10)的粘贴到空白图片里
这样我们就可以得到一张合成好的图片了
# 创建一张大小一样的图片
那么到现在
我们可以得到网页上显示的那两张图片了
一张完全的图片
一张带缺口的图片
接下来我们就要通过对比这两张图
看看我们要滑动的距离是多远
# 合成图片
可以通过图片的 RGB 来计算
我们设定一个阈值
如果 r、g、b 大于这个阈值
我们就返回距离
def get_distance(bg_Image, fullbg_Image):
现在
我们知道了关键的滑动距离了
激动人心的时刻到了
我们使用 selenium
拿到滑块的元素
然后根据这个距离拖动到缺口位置不就好了么
马上打开 selenium 的文档
看到了这个函数
它可以使用左键点击元素
然后拖动到指定距离
最后释放鼠标左键
knob = WAIT.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#gc-box > div > div.gt_slider > div.gt_slider_knob.gt_show")))
运行一下试试看吧
妖怪吃了拼图了
看来直接拖拽是不行的
试着拖完滑块让它睡一下再释放
ActionChains(driver).click_and_hold(knob).perform()
发现拼图还是特么的被妖怪吃了
有个叫匀速直线运动的东西
什么 加速度
什么 v = v0 + at
什么 s = ½at²
什么鬼
回到正题
我们可以使用它来构造一个运动路径
该加速时加速
该减速的时候减速
这样的话就更像人类在滑动滑块了
这次
我们使用这个轨迹来滑动
knob = WAIT.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#gc-box > div > div.gt_slider > div.gt_slider_knob.gt_show")))
好了好了
我们再来运行一下吧
哈哈哈
成功识别了
当然了
成功率不是 100%
可以多调戏它几次
以上就是识别滑动验证码的具体过程了
对于其它大部分的滑动验证码
也是可以使用这招搞定的
最后如果你依然在编程的世界里迷茫,不知道自己的未来规划,对python感兴趣,小编为初学者们准备的python入门教程!
请私信回复:“学习”就可以拿到一份我为大家准备的Python学习资料!希望能帮助你更了解python,学习python。
完整代码:
*请认真填写需求信息,我们会在24小时内与您取得联系。