使用谷歌浏览器扩展查排名(开发谷歌浏览器扩展)

今天由我来交大家使用谷歌浏览器扩展获取指定网页内容,并且把获取到的内容通过ajax发送给远程接口。有哪里不对的欢迎大家指正。
1.编写谷歌扩展配置文件,固定格式,固定名称 “manifest.json”。注意:谷歌扩展3版本

{
  "name": "扩展名称",
  "description": "扩展描述",
  #扩展版本
  "version": "1.0",      
  #申明谷歌扩展3
  "manifest_version": 3,
  #扩展核心js ,俗话中控系统
  "background": {
    "service_worker": "background.js"
  },
  #请求域名白名单  此处允许所有的域名
  "host_permissions": [
    "<all_urls>"
  ],
  #扩展权限,自己网上查
  "permissions": [
    "management",
    "storage",
    "activeTab",
    "tabs",
    "notifications",
    "webRequest",
    "webRequestBlocking"
  ],
  #扩展图片
  "icons":
  {
    "16": "img/icon.png",
    "48": "img/icon.png",
    "128": "img/icon.png"
  },
  #右上角点击扩展图标,弹出的小页面
  "action": {
	"default_popup": "popup.html"
  },
  "content_scripts": [
    {
    	#跟正则差不多,当前页面url跟正则里边的url匹配是,触发扩展 background.js,
      "matches": ["*://m.baidu.com/*"],
      #申明扩展允许执行的js白名单,就是申明这些js以后,扩展可以调用了
      "js": ["common.js", "jquery.min.js", "getDetail.js"],
      #申明扩展在页面加载完成以后执行,有三个选项,自己网上查,很重要的
	  	"run_at":"document_idle"
    }
  ]
}

2.编写核心 background.js(所有的权限都可以在这个js里边写),这个代码的作用就是监听消息有没有发送,当收到消息数据的时候,存在本地,并且使用 fetch 发送给远程接口

chrome.runtime.onMessage.addListener(async (msg, sender) => {
    if (msg.data) {
      chrome.storage.sync.getBytesInUse("paimingData",function(e){
      	#当本地数据大于800时发送给接口,否则就继续追加到本地
        console.log("大小:" + e);
         if(e>=800) {
           chrome.storage.sync.get("paimingData", function(e){
             if (e['paimingData']) {
               var postdata = e['paimingData'];
             } else {
               return false;
             }

             var headers = new Headers();
             headers.append("Content-Type", "application/x-www-form-urlencoded");
             var fetchOptions = {
               method: "POST",
               cache: 'no-cache',
               credentials: 'include',
               headers: headers,
               referrerPolicy: 'no-referrer-when-downgrade',
               body:JSON.stringify({"data":postdata})
             };
						#要注意记得在配置中添加白名单
             var url = "http://xx.xx.cn/newapi/savepaiming";
             response = fetch(url,fetchOptions).then(function(response){
               if (response.status==200) {
                 response.text().then(data => {
                     if(data == "success") {
                       console.log("成功了");
                     }
                 })
               }
             }).catch(function(err) {
               console.log("失败了" + err);
             });

           })

         } else {
         	#新数据追加到本地
           chrome.storage.sync.get("paimingData", function(e2){
             if(e2['paimingData']) {
               var oldData = e2['paimingData']
             }else {
               var oldData = new Array();
             }
             console.log("laoshuju")
             console.log(oldData)

             var jg = msg.data;
             for (var i in jg) {
               oldData.push(jg[i])
             }
             chrome.storage.sync.set({"paimingData":oldData});

           })
         }

      });

    }

  if (msg.close) {
  	#如果接收到需要关闭,那么久关闭当前的tab窗口
    console.log("要关闭了啊")
    setTimeout(function(){
      chrome.tabs.remove(sender.tab.id)
    },10000);
  }
})

3.当扩展匹配到当前域名跟配置文件中的域名一致时,触发所有申明的js
1>第一个common.js 声明公共的函数

#checkDomTxt  dom对象可以是js的也可以是jquery的,因为我申明了jquery,所以可以使用
#executeNum  执行次数,比如第几次执行,我这里不判断直到有dom对象位置
#callback  回调函数
#maxNum   最大循环次数,我没使用
#这个函数是我使用jquery  判断 .c-result result 这个对象有没有 ,我这个写法不严谨,各位同学不要模仿
function checkData(checkDomTxt, executeNum, callback, maxNum = 100) {
 console.log("等待元素"+executeNum);

 while (1) {
   if ($(".c-result result")) {
     callback()
     break;
   } else {
     setTimeout(function(){
         checkData(checkDomTxt, executeNum + 1, callback, maxNum)
     },1000)
   }
 }
}

2>第二个getDetail.js 使用jquery获取页面dom对象,匹配页面元素 。配置文件中申明,只要匹配到域名,在dom加载完成后,执行该js

function getData() {
   console.log("执行到获取元素了");
   var current_url = window.location.href
   var page = 1;
   #我这里边判断url中的分页,我提交接口使用的参数,
   if(current_url.indexOf("pn") == -1){
   	page = 1;
   } else {
   	var preg = /pn=(\d+)/g;//加上g的话,就是全局匹配!
   	var pipei = current_url.match(preg)
   	if(pipei && pipei[0]) {
   		page = (pipei[0].match(/\d+/)/10) + 1;
   	}
   }
   var res = new Array();
   var keyword = $("#kw").val();
   #我这里匹配百度搜索列表中的所有结果,并且放到res2对象中
   document.querySelectorAll(".c-result").forEach(function(v){
   	var jg = v.getAttribute("data-log")
   	var mulu = JSON.parse(jg)
   	var yumming =  mulu['mu'];
   	var order =  mulu['order'];
   	#这里是当搜索结果包含了 “ xxx.cn/abc”  就添加到对象中,这里就是查排名的关键了
   	if(yumming.indexOf("xxx.cn/abc") !== -1){
   		var res2 = {};
   		res2['keyword'] = keyword;
   		res2['order'] = order;
   		res2['yuming'] = yumming;
   		res2['page']  = page;
   		res.push(res2)
   	}
   })
   #因为我们申明的js没有发送接口的权限,所以必须吧结果发送到系统的 background.js ,并且需要关闭当前的tab窗口
   chrome.runtime.sendMessage({ data: res, close: true })

}
#判断jquery对象是否存在,如果存在回调getData函数
checkData('.c-result result', 0, getData)
  1. popup.html这个页面也是系统定死的,就是点一下又上角那个图标,弹出来的小窗口页面,可以在这里边写。
    popup.js 这个js,在4. popup.html中引入,具体有哪些权限大家可以网上查一下。
    这个popup可以交互使用
<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <title>Document</title>
 <style>
   .wrap {
     width: 300px;
     padding: 24px;
   }
 </style>
</head>
<body>
 <div class="wrap">
   <button id="show">show data</button>
   <div class="log"></div>
 </div>
 <script src="./popup.js"></script>
</body>
</html>
const btn = document.querySelector('#show')
function log(txt) {
 document.querySelector('.log').appendChild(document.createElement('div')).innerText = "> " + txt;
}
btn.addEventListener('click', () => {
 document.querySelector('.log').innerHTML = ''
 chrome.storage.sync.get("paimingData", function(result) {
     result['paimingData'].forEach(function(v){
   	  console.log(JSON.stringify(v));
   	  log(JSON.stringify(v))
     })
 })  
})

5.添加扩展到谷歌浏览器
第一步输入: chrome://extensions/
第二步:点击右上角开发者模式
第三步:加载已解压的扩展程序
第四步:完成扩展了
第五步:查看background.js控制台要点击service worker ,查看其它js打开网页控制台就行

6.python 配合浏览器打开网页,然后扩展进行页面获取,并且发送给接口。

# coding=utf-8

import webbrowser
import time
import os

browser_path = r"C:\Users\wode\AppData\Local\Google\Chrome\Application\chrome.exe"
webbrowser.register('chrome', None, webbrowser.BackgroundBrowser(browser_path))
url = "https://m.baidu.com/ssid=12c5bfbfc6d7sssea367/s?word={}&sa=tb&ts=4051354&t_kt=0&ie=utf-8&rsv_t=61e4xG2ZksUq2VpMHCI%252B1MlSqOMuV2K3bd34tg3cRyLmKI5hsPZV&rsv_pq=7649134964387212888&gpc=&sugid=201453468124012&rqlang=zh&rsv_sug4=3927&inputT=2996&oq=%E5%AE%81%E5%A4%8F%E7%99%BD%E7%99%9C%E9%A3%8E%E5%8C%BB%E9%99%A2%E5%93%AA%E5%AE%B6%E5%A5%BD"

filename = "./chaxunci.txt"
with open(filename, "r", encoding='utf-8') as f:
    for d in f.readlines():
        keyword = d.strip()
        if keyword:
            request_url = ""
            request_url = url.format(keyword)
            print(request_url)
            webbrowser.get('chrome').open(request_url, new=2, autoraise=True)
            time.sleep(3.5)
os.system('taskkill /f /IM Chrome.exe')

以上就是使用谷歌浏览器扩展+python查百度收录排名情况了。仅供给个同学学习参考。
下载代码地址:https://download.csdn.net/download/wei042/86772347

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值