圖形驗證插件
網上找了很多圖形驗證插件,比較推薦verify.js
<link rel="stylesheet" type="text/css" href="https://www.cnblogs.com/Gao1234/p/css/verify.css">
<script type="text/javascript" src="https://www.cnblogs.com/Gao1234/p/js/jquery.min.js"></script> <script type="text/javascript" src="https://www.cnblogs.com/Gao1234/p/js/verify.js"></script>
<div id="mpanel4"></div> <script type="text/javascript"> $('#mpanel4').slideVerify({ type: 2, vOffset: 5, vSpace: 5, imgName: ['1.jpg', '2.jpg', '3.jpg', '4.jpg', '5.jpg', '6.jpg', '7.jpg', '8.jpg'], imgSize: { width: '400px', height: '200px', }, blockSize: { width: '40px', height: '40px', }, barSize: { width: '400px', height: '40px', }, ready: function () {}, success: function () { $(".verify-left-bar .verify-msg").html('成功'); $(".verify-left-bar .verify-msg").css('color','#5cb85c'); }, error: function () {} }); </script>

百度編輯器拓展功能

紅框內就是自定義的功能
引入百度編輯器后
ueditor.all.js
//為工具列添加按鈕,以下都是統一的按鈕觸發命令,所以寫在一起 var btnCmds = ['translation《--這是你新加的功能','undo', 'redo', 'formatmatch', 'bold', 'italic', 'underline', 'fontborder', 'touppercase', 'tolowercase', 'strikethrough', 'subscript', 'superscript', 'source', 'indent', 'outdent', 'blockquote', 'pasteplain', 'pagebreak', 'selectall', 'print','horizontal', 'removeformat', 'time', 'date', 'unlink', 'insertparagraphbeforetable', 'insertrow', 'insertcol', 'mergeright', 'mergedown', 'deleterow', 'deletecol', 'splittorows', 'splittocols', 'splittocells', 'mergecells', 'deletetable', 'drafts'];
ueditor.config.js
, toolbars: [['translation《--和上面保持一樣的名字', '|', 'fullscreen', 'source', '|', 'undo', 'redo', '|', 'bold', 'italic', 'underline', 'fontborder', 'strikethrough', 'superscript', 'subscript', 'removeformat', 'formatmatch', 'autotypeset', 'blockquote', 'pasteplain', '|', 'forecolor', 'backcolor', 'insertorderedlist', 'insertunorderedlist', 'selectall', 'cleardoc', '|', 'rowspacingtop', 'rowspacingbottom', 'lineheight', '|', 'customstyle', 'paragraph', 'fontfamily', 'fontsize', '|', 'directionalityltr', 'directionalityrtl', 'indent', '|', 'justifyleft', 'justifycenter', 'justifyright', 'justifyjustify', '|', 'touppercase', 'tolowercase', '|', 'link', 'unlink', 'anchor', '|', 'imagenone', 'imageleft', 'imageright', 'imagecenter', '|', 'simpleupload', 'insertimage', 'emotion', 'scrawl', 'insertvideo', 'music', 'attachment', 'map', 'gmap', 'insertframe', 'insertcode', 'webapp', 'pagebreak', 'template', 'background', '|', 'horizontal', 'date', 'time', 'spechars', 'snapscreen', 'wordimage', '|', 'inserttable', 'deletetable', 'insertparagraphbeforetable', 'insertrow', 'deleterow', 'insertcol', 'deletecol', 'mergecells', 'mergeright', 'mergedown', 'splittocells', 'splittorows', 'splittocols', 'charts', '|', 'print', 'preview', 'searchreplace', 'drafts', 'help' ]] //當滑鼠放在工具列上時顯示的tooltip提示,留空支持自動多語言配置,否則以配置值為準 //,labelMap:{ // 'anchor':'', 'undo':'' //} , labelMap: { 'translation': '翻譯《--滑鼠放上去的提示' }
在初始化編輯器之前增加命令
UE.commands['translation'] = { execCommand: function () { var translation = UE.getEditor(this.key);//富文本 點擊后觸發的事件 }, queryCommandState: function () { } }; var ue = UE.getEditor('editor');
效果,我再百度編輯器上新增的翻譯功能

NodeJs 做聊天室
NodeJs 可以在服務器上運行,做JS的服務端,與客戶端NodeJs 保持長連接,業務上可以做及時溝通,
參考socket.io.js
服務端代碼:
var httpd = require('http').createServer(handler); var io = require('socket.io').listen(httpd); var fs = require('fs');
參考三個比較關鍵的資源
httpd.listen(3000);
監聽3000埠,一般是8077.,,
function handler(req, res) { fs.readFile(__dirname + '/index.html', function(err, data) { if (err) { res.writeHead(500); return res.end('Error loading index.html'); } res.writeHead(200); res.end(data); } ); }
創建HTTP鏈接
io.sockets.on('connection', function (socket) { socket.on('clientMessage', function(content) { socket.emit('serverMessage', 'You said: ' + content); var username = null; if (socket.username) { username = socket.username; } socket.broadcast.emit('serverMessage', username + ' said: ' + content); }); socket.on('login', function(username) { socket.username = username; socket.emit('serverMessage', 'Currently logged in as ' + username); socket.broadcast.emit('serverMessage', 'User ' + username + ' logged in'); }); socket.emit('login'); });
以上是NodeJs服務端相應事件的主體代碼
<script src=https://www.cnblogs.com/Gao1234/p/"http://localhost:3000/socket.io/socket.io.js"></script> <script type="text/javascript"> var messagesElement = document.getElementById('messages'); var lastMessageElement = null; var id = 1; function addMessage(message) { var newMessageElement = document.createElement('div'); var newMessageText = document.createTextNode(message); newMessageElement.appendChild(newMessageText); messagesElement.insertBefore(newMessageElement, lastMessageElement); lastMessageElement = newMessageElement; } var socket = io.connect('http://localhost:3000'); socket.on('serverMessage', function (content,id) { addMessage(content+id ); }); socket.on('login', function () { var username = prompt('What username would you like to use?'); socket.emit('login', username); }); var inputElement = document.getElementById('input'); inputElement.onkeydown = function (keyboardEvent) { if (keyboardEvent.keyCode === 13) { socket.emit('clientMessage', inputElement.value,'11'); inputElement.value = ''; return false; } else { return true; } }; </script>
以上是客戶端相應事件的主體代碼
接下來說下訊息機制吧
客戶端 var socket = io.connect('http://localhost:3000');
服務端 io.sockets.on('connection', function (socket) {
}
只要沒報500,就說明連接正常,這時候客戶端可以主動向服務端推送訊息,服務端也可以像客戶端推送訊息,
socket.on('login', function (content) { socket.emit('serverMessage', '單方面回復非廣播' + content); socket.broadcast.emit('serverMessage', '全部回復廣播' + content) }) socket.emit('login');
服務端定義了用戶登錄,并在連接成功后主動發起Login請求
socket.on('login', function () { var username = prompt('What username would you like to use?'); socket.emit('login', username); });
客戶端回應服務端Login 傳入登錄的用戶名
服務端 以 serverMessage 單方面回應請求的客戶端機器(非所有客戶端機器),broadcast 廣播除請求客戶端機器以外的所有機器
客戶端回應服務端 serverMessage
socket.on('serverMessage', function (content,id) { addMessage(content+id ); });
將訊息加入Html中展示,完成服務端端主動推送訊息機制
inputElement.onkeydown = function (keyboardEvent) { if (keyboardEvent.keyCode === 13) { socket.emit('clientMessage', inputElement.value,'11');
客戶端文本框寫入訊息并摁下回車,回應clientMessage
socket.on('clientMessage', function (content,id) { socket.emit('serverMessage', '單方面回復非廣播' + content ,id); socket.broadcast.emit('serverMessage', '全部回復廣播' + content) })
服務端回應clientMessage,并以serverMessage回應請求客戶端IP,broadcast回應其他客戶端IP.完成客戶端主動推送訊息機制
Python做網路爬蟲
options = webdriver.FirefoxOptions()//使用火狐模擬器做爬蟲,可以發送和跟蹤滑鼠點擊翻頁等事件
options.add_argument('--headless') //無視窗模式
driver = webdriver.Firefox(options=options)
driver.get("http://registers.centralbank.ie/FirmRegisterDataPage.aspx?firmReferenceNumber=C53877®ister=32")//目表地址
html = etree.HTML(driver.page_source) //#分析HTML,回傳DOM根節點
spanList=html.xpath("//div[@id='ctl00_cphRegistersMasterPage_c1wrptFirmRegisterData']//span")//也可以使用類似得Xpath獲取到指定節點
while index<len(spanList): model=spanList[index] # Name: if (model.text=='Name:'): name=spanList[index+1].text else: pass
也可以用回圈每個元素體的方式,獲取每個元素的TITLE,比如找到SPAN的文本為:Name,那下一個Span 的值就是要要被抓取的元素
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/113079.html
標籤:JavaScript
