zoukankan      html  css  js  c++  java
  • 图形验证插件,百度编辑器拓展功能,NodeJs消息机制以及聊天室,Python做爬虫

    图形验证插件

    网上找了很多图形验证插件,比较推荐verify.js

    <link rel="stylesheet" type="text/css" href="css/verify.css">
    <script type="text/javascript" src="js/jquery.min.js"></script> <script type="text/javascript" src="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: {
                     '400px',
                    height: '200px',
                },
                blockSize: {
                     '40px',
                    height: '40px',
                },
                barSize: {
                     '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="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&register=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 的值就是要要被抓取的元素

  • 相关阅读:
    设计模式20-观察者模式
    设计模式19-备忘录模式
    设计模式18-中介者模式
    设计模式17-迭代器模式
    设计模式16-解释器模式
    Wireshark基本介绍和学习TCP三次握手
    Jmeter CSV 参数化/检查点/断言
    Jmeter运营活动并发测试—巧用集合点
    一个简单的性能测试
    Jmeter对HTTP请求压力测试、并发测试
  • 原文地址:https://www.cnblogs.com/Gao1234/p/11125021.html
Copyright © 2011-2022 走看看