scifinder

从scifinder和scifinder-n中获取所需要的化学信息

当前为 2023-06-09 提交的版本,查看 最新版本

// ==UserScript==
// @name         scifinder
// @namespace    https://origin-scifinder.cas.org
// @version      2.3.5
// @description  从scifinder和scifinder-n中获取所需要的化学信息
// @author       zhaomeng
// @match        https://*/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=tampermonkey.net
// @grant        unsafeWindow
// @grant        GM_getResourceText
// @grant        GM_addStyle
// @grant        GM_xmlhttpRequest
// @resource customCSS https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css
// @require      https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js
// @require      https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js
// @require      https://cdn.staticfile.org/twitter-bootstrap/3.3.7/js/bootstrap.min.js
// @license      MIT
// ==/UserScript==

(function() {
    'use strict';
     /*将以下的js脚本注入浏览器页面,实现页面元素点选,获取页面的css*/
    /* globals jQuery, $, waitForKeyElements */
    var css =GM_getResourceText("customCSS");
    GM_addStyle(css);
     /*创建页面的按钮*/
    var modal = '<div class="modal fade in" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"><div class="modal-dialog"><div class="modal-content" style="width:800px;"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button><h4 class="modal-title" id="myModalLabel">Scifinder数据</h4></div><div class="modal-body"></div><div class="modal-footer"><button type="button" class="btn btn-primary">提交数据</button></div></div><!-- /.modal-content --> </div><!-- /.modal --></div>'
    $("body").append(modal)
    $('body').append('<div id="draggable" style="position: absolute;cursor: move;;left: 0;top: 250px;width:209px;background-color:white;padding-top:30px;margin:20px;"> <button type="button" id ="kj_login" class="btn btn-primary">打开登陆窗口</button></div></iframe>')


    var loginkey = localStorage.getItem("loginkey");
    console.log('11111111111111111')
    console.log(loginkey)
    if(loginkey!=null){
        $('#draggable').html('<button type="button"  style="background-color:#da4f49;color:white;height: 45px;padding: 6px;" id="kj_selected">查看DOI的文献及物质</button><button type="button" style="background-color:#da4f49;color:white;height: 45px;padding: 6px;" id="kj_selected1">查看Scifinder-n基本信息</button><button type="button" style="background-color:#da4f49;color:white;height: 45px;padding: 6px;" id="kj_selected2">查看Scifinder-n合成路线及文献</button>')

    }else{
      /*登陆模态框*/
    $('#kj_login').on("click",function(event){
        /*登陆组件*/
        var login = '<form><div class="form-group"><label for="username">用户名:</label><input type="text" class="form-control" id="username" placeholder="请输入用户名"></div><div class="form-group"><label for="password">密码:</label><input type="password" class="form-control" id="password" placeholder="请输入密码"></div></form><div id="loginMsg"></div>'
        var login_button = '<button type="button" class="btn btn-primary" id="loginBtn">登陆</button><button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>'

        $("div.modal-body").html(login)
        $("div.modal-footer").html(login_button)
        $('#myModal').modal("show")
    })

    }


     // 点击登陆按钮,发送 AJAX 请求进行登陆操作
    $(document).on('click', '#loginBtn', function() {
        var username = $("#username").val();
        var password = $("#password").val();
        /*$('#draggable').html('<button type="button"  style="background-color:#da4f49;color:white;height: 45px;padding: 6px;" id="kj_selected">查看DOI的文献及物质</button><button type="button" style="background-color:#da4f49;color:white;height: 45px;padding: 6px;" id="kj_selected1">查看Scifinder-n基本信息</button><button type="button" style="background-color:#da4f49;color:white;height: 45px;padding: 6px;" id="kj_selected2">查看Scifinder-n合成路线及文献</button>')*/
        $("#loginMsg").html("登陆成功。");
        $('#myModal').modal("hide")
        GM_xmlhttpRequest({
            url:"http://120.55.59.217:8001/login/access-token",
            method :"POST",
            data:JSON.stringify({
                username: username,
                password: password
            }),
            headers: {
                "Content-type": "application/json"
            },
            onload:function(response){
                console.log(response.responseText)
                var resp = response.responseText
                var loginkey = localStorage.setItem("loginkey",resp.token);
                $("#loginMsg").html("登陆成功。");
                location.reload();
            }
        });

    })


    //获取需要拖动的元素
    var draggableElement = document.getElementById("draggable");

    //记录拖动状态的变量
    var isDragging = false;

    //记录鼠标位置和元素位置的变量
    var currentX;
    var currentY;
    var initialX;
    var initialY;
    var xOffset = 0;
    var yOffset = 0;

    //添加鼠标按下事件监听器
    draggableElement.addEventListener("mousedown", dragStart);

    //添加鼠标移动事件监听器
    draggableElement.addEventListener("mousemove", drag);

    //添加鼠标释放事件监听器
    draggableElement.addEventListener("mouseup", dragEnd);

    //添加鼠标离开事件监听器
    draggableElement.addEventListener("mouseleave", dragEnd);

    //鼠标按下时触发
    function dragStart(e) {
        initialX = e.clientX - xOffset;
        initialY = e.clientY - yOffset;

        if (e.target === draggableElement) {
            isDragging = true;
        }
    }

    //鼠标移动时触发
    function drag(e) {
        if (isDragging) {
            e.preventDefault();

            currentX = e.clientX - initialX;
            currentY = e.clientY - initialY;

            xOffset = currentX;
            yOffset = currentY;

            setTranslate(currentX, currentY, draggableElement);
        }
    }

    //鼠标释放时触发
    function dragEnd(e) {
        initialX = currentX;
        initialY = currentY;

        isDragging = false;
    }

    //设置元素位置的函数
    function setTranslate(xPos, yPos, el) {
        el.style.transform = "translate3d(" + xPos + "px, " + yPos + "px, 0)";
    }
    /*存储页面获取到的数据*/
    var data={}

    /*获取文献信息*/
    $(document).on('click', '#kj_selected', function() {
        $("div.modal-body").html('')
        var list=[]
        $('.substanceRN>a:nth-child(1)').each(function(){

         var cas = $(this).text()
         list.push(cas)
        })

        var list1=[]
        $('ol.citation li a:nth-child(1)').each(function(){

            var citiation = $(this).text()
            list1.push(citiation)
        })
        var doi = $('li.breadcrumb:nth-child(1)>span.label').text()
        var item={
           casno:list,
           citiations:list1,
           doi:doi
        }

       console.log(item)
        if(item.casno && item.citiations&& item.doi){
           console.log(item)
           var ff = '<dl><dt>DOI:</dt><dd>'+item.doi+'</dd><dt>CASNO:</dt><dd>'+list.join("<br>")+'</dd><dt>Citiations:</dt><dd>'+list1.join("<br>")+'</dd></dl>'

           $("div.modal-body").html(ff)
           $("div.modal-footer").html('<button type="button" id="refer" class="btn btn-primary">提交数据</button>')

           $('#myModal').modal("show")
            /*------------------*/
            data=item
        }else{
             alert("确认是否为文献页面!")
        }

    })

    /*scifinder-n基本信息*/
    $(document).on('click', '#kj_selected1', function() {
        $("div.modal-body").html('')
        var list=[]
        $('ul.list-unstyled.list-striped li span').each(function(){
            var name = $(this).text()
            list.push(name)
        })

        var enname = $('.substance-name.ng-star-inserted').text()
        var result_cas = $('span>mark').text().trim()
        var casno = $('title').text()
        var item={
           casno:casno,
           ename: enname,
           result_cas:result_cas,
           enbm:list,
        }

       console.log(item)
        if(item.casno && item.result_cas && item.ename){
           console.log(item)
           var ff = '<dl><dt>搜索CasNo:</dt><dd>'+item.casno+'</dd><dt>英文名:</dt><dd>'+item.ename+'</dd><dt>结果CasNo:</dt><dd>'+item.result_cas+'</dd><dt>别名:</dt><dd>'+list.join("<br>")+'</dd></dl>'

           $("div.modal-body").html(ff)
           $("div.modal-footer").html('<button type="button" id="baseinfo" class="btn btn-primary">提交数据</button>')

           $('#myModal').modal("show")
           data=item

        }else{
            alert("确认是否为基本信息页面!")
        }

    })

    /*合成路线及文献*/
    $(document).on('click', '#kj_selected2', function() {
        $("div.modal-body").html('')
        $('.dropdown-menu').remove()
        var list=[]
        var casno =$(".toolbar-title span[class]:last-child").text()
        $('sf-reaction-result-page .reaction-result-answers').each(function(index){
            var authors = $("span.authors-text",this).text().trim()
            var title = $('h4>a',this).text().trim()
            var breif=$(".bibliography",this).text().trim()
            var cas_start=[]
            $('.reaction-tile-reactant .rn-no-image.ng-star-inserted',this).each(function(){
                cas_start.push($(this).text().trim())
            })
            $('.reaction-tile-reactant img',this).each(function(){
                var cas = $(this).attr("alt").trim()
                cas_start.push(cas)
            })
            var cas_end=[]
            $('.reaction-tile-product .rn-no-image.ng-star-inserted',this).each(function(){
                cas_end.push($(this).text().trim())
            })
            $('.reaction-tile-product img',this).each(function(){

                var cas = $(this).attr("alt")
                cas_end.push(cas)
            })
            var relate=[]
            $('.summary-steps.ng-star-inserted div.summary-step.ng-star-inserted',this).each(function(){
                $('div.summary-stage.ng-star-inserted',this).each(function(){
                    var step=$(this).text().trim()
                    relate.push(step)
                })

            })
            var rate = $('.yield-value',this).text()
            var item={title:title,authors:authors,breif:breif,cas_start:cas_start,cas_end:cas_end,relate:relate,rate:rate,casno:casno}
            list.push(item)
        })
        if(list.length>0){
            console.log(list)
            var content=''
            for(var j=0;j<list.length;j++){
                var ff = '<dl><dt>'+(j+1)+'.标题:</dt><dd>'+list[j].title+'</dd><dt>作者:</dt><dd>'+list[j].authors+'</dd><dt>简介:</dt><dd>'+list[j].breif+'</dd><dt>合成路线:</dt><dd>'+list[j].cas_start.join("+")+'->'+list[j].cas_end.join("+")+'</dd><dt>产率:</dt><dd>'+list[j].rate+'</dd><dt>实验步骤:</dt><dd>'+list[j].relate.join('<br>').trim()+'</dd></dl><br>'
                content+=ff
            }
            $("div.modal-body").html('<dt>CasNo:</dt><dd>'+list[0].casno+'</dd> <br>'+content)
            $("div.modal-footer").html('<button type="button" id="compose" class="btn btn-primary">提交数据</button>')
            $('#myModal').modal("show")
            data={"casno":list[0].casno,"compose":list}

        }else{
            alert("确认是否为合成路线页面!")
        }

    })
    /*基本信息*/
    $(document).on('click', '#refer', function() {
        GM_xmlhttpRequest({
            url:"http://120.55.59.217:8001/references/",
            method :"POST",
            data:JSON.stringify(data),
            headers: {
                "Content-type": "application/json"
            },
            onload:function(response){
                console.log(response.responseText)
                var resp = response.responseText
                $("#loginMsg").html("发送成功。");
            }
        });
       /*$.ajax({
           headers: {
               "token": loginkey
           },
           type: "POST",
           url: "http://120.55.59.217:8001/references/",
           contentType: "application/json",
           data: data,
           success: function(result){
               // 登陆成功:刷新页面或者跳转到其他页面
               //location.reload();
               $("#loginMsg").html("发送成功。");
           },
           error: function(){
               localStorage.removeItem('loginkey')
               alert('发送失败。')
               // 登陆失败:提示错误信息
               $("#loginMsg").html("发送失败");
           }
       });*/
    });
    /*接口结束*/
      /*基本信息*/
    $(document).on('click', '#baseinfo', function() {
        GM_xmlhttpRequest({
            url:"http://120.55.59.217:8001/info/",
            method :"POST",
            data:JSON.stringify(data),
            headers: {
                "Content-type": "application/json"
            },
            onload:function(response){
                console.log(response.responseText)
                var resp = response.responseText
                $("#loginMsg").html("发送成功。");
            }
        });
       /*$.ajax({
           headers: {
               "token": loginkey
           },
           type: "POST",
           url: "http://120.55.59.217:8001/info/",
           contentType: "application/json",
           data: data,
           success: function(result){
               // 登陆成功:刷新页面或者跳转到其他页面
               //location.reload();
               $("#loginMsg").html("发送成功。");
           },
           error: function(){
               localStorage.removeItem('loginkey')
               alert('发送失败。')
               // 登陆失败:提示错误信息
               $("#loginMsg").html("发送失败");
           }
       });*/
    });
    /*接口结束*/
    /*基本信息*/
    $(document).on('click', '#compose', function() {
        GM_xmlhttpRequest({
            url:"http://120.55.59.217:8001/composes/",
            method :"POST",
            data:JSON.stringify(data),
            headers: {
                "Content-type": "application/json"
            },
            onload:function(response){
                console.log(response.responseText)
                var resp = response.responseText
                $("#loginMsg").html("发送成功。");
            }
        });
       /*$.ajax({
           headers: {
               "token": loginkey
           },
           type: "POST",
           url: "http://120.55.59.217:8001/composes/",
           contentType: "application/json",
           data: data,
           success: function(result){
               // 登陆成功:刷新页面或者跳转到其他页面
               //location.reload();
               $("#loginMsg").html("发送成功。");
           },
           error: function(){
               localStorage.removeItem('loginkey')
               alert('发送失败。')
               // 登陆失败:提示错误信息
               $("#loginMsg").html("发送失败");
           }
       });*/
    });
    /*接口结束*/
    // Your code here...
})();