文地址: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 = ?at2
什么鬼
回到正題
我們可以使用它來構造一個運動路徑
該加速時加速
該減速的時候減速
這樣的話就更像人類在滑動滑塊了
這次
我們使用這個軌跡來滑動
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小時內與您取得聯系。