首页 > 其他分享 >从零开始实现WEB自动化 - 网页操作

从零开始实现WEB自动化 - 网页操作

时间:2024-10-25 10:18:58浏览次数:7  
标签:code WEB tabid 网页 await 从零开始 let tab data

本篇是带领大家一起来搭建自动化操作的Chrome插件

网页操作基本只会涉及background.js文件的编写,所以我们来分段实现功能清单的操作

可以根据此篇文章来了解Chrome API支持功能项,来实现功能需求。

chrome谷歌浏览器开发文档谷歌浏览器扩展开发- cenchy.com,chrome,chrome扩展,chrome扩展开发,谷歌浏览器,谷歌浏览器api,谷歌浏览器扩展开发icon-default.png?t=O83Ahttps://chrome.cenchy.com/tabs.html

打开网页

功能需求:给定URL,在新建页签中打开并需等待目标网址加载完成。

const BusOperation = {
    //打开网页,
    //url,打开的网页地址并等待加载完成并至多等待至超时时间
    openUrl: async (url, timeout=20) => {
        let cfg = {url: url}
        let tab = await NatOperation.tabsCreate(cfg);
        for(let i=0; i< timeout; i++){
            await NatOperation.wait(1000); //等待1秒
            let state = await NatOperation.sendContentMessage(tab.id, "loadState", {});
            if(state == BUS_PARAM_S.PAGE_STATE_SUCCESSFUL){
                break
            }
        }
    }
}

调用测试

let url = 'https://www.baidu.com/'
BusOperation.openUrl(url)

点击刷新后,浏览器会自动打开百度搜索,说明我们打开网页功能完成。

获取网页

功能需求:获取已打开的网页页签

//返回已选中的页签数据
currentTab: async () => {
    let tabList = await NatOperation.tabsQuery();
    for (const tab of tabList){
        if(tab.active){
            return tab
        }
    }
    return null;
}

跳转网页

功能需求:给定URL地址,在当前页签上跳转至新的网址

Chrome API虽然没有直接给定的API支持调用,但是我们可以通过执行JavaScript脚本的方式进行URL跳转,例如

window.location.href = 'https://www.baidu.com/'

那我们实现如下

    //执行JavaScript脚本
    //data.tabid = 浏览器页签ID,可从openUrl或currentTab获取
    //data.code = 需要执行的脚本
    executeScript: async (data) => {
        if(!data.tabid || !data.code){
            return;
        }
        let script = "function doSend() { " + data.code + " }; doSend();";
        await NatOperation.executeScript(parseInt(data.tabid), { code: script })
    }

    //调用。。。
    let code = "window.location.href = 'https://blog.csdn.net/';"
    await BusOperation.executeScript({
        tabid: openTab.id,
        code: code
    });

切换页签

功能需求:根据传入的tab页签记录,切换浏览器页签

    //选中某个页签
    selectTab: async (tabid) => {
        let tab = await BusOperation.selectTabByTabId(tabid);
        if(tab != null){
            await NatOperation.highlight(tab.index);
        }
    },
    //根据tabid查找tab对象
    selectTabByTabId: async (tabid) => {
        let tabList = await NatOperation.tabsQuery();
        for(tab of tabList){
            if(tabid === tab.id){
                return tab
            }
        }
        return null;
    }

执行脚本

功能需求:执行一段自定义的JavaScript脚本

    //执行JavaScript脚本
    //data.tabid = 浏览器页签ID,可从openUrl或currentTab获取
    //data.code = 需要执行的脚本
    executeScript: async (data) => {
        if(!data.tabid || !data.code){
            return;
        }
        let script = "function doSend() { " + data.code + " }; doSend();";
        await NatOperation.executeScript(parseInt(data.tabid), { code: script })
    },

关闭网页

功能需求:根据页签ID,关闭浏览器页签

    //关闭浏览器页签
    colseTab: (tabid) => {
        tabid && chrome.tabs.remove(parseInt(tabid));
    },

以上的功能逻辑测试如下

async function opt_test(){
    //1.打开网页
    let url = 'https://www.baidu.com/'
    let openTab = await BusOperation.openUrl(url)
    //2.获取网页
    let tab = await BusOperation.currentTab();
    console.log("currentTab", tab);
    //3.跳转网页&执行JavaScript脚本
    await NatOperation.wait(2000);
    let code = "window.location.href = 'https://blog.csdn.net/';"
    await BusOperation.executeScript({
        tabid: openTab.id,
        code: code
    });
    await NatOperation.wait(2000);
    //4.选中页签
    let openTab1 = await BusOperation.openUrl(url);
    await NatOperation.wait(2000);
    await BusOperation.selectTab(openTab.id);
    //5.关闭页签
    await NatOperation.wait(1000);
    BusOperation.colseTab(openTab.id);
    await NatOperation.wait(1000);
    BusOperation.colseTab(openTab1.id);
}

以上便是网页操作部分的代码了,了解API文档,知道什么该调用什么API,其实实现起来是非常容易的。

标签:code,WEB,tabid,网页,await,从零开始,let,tab,data
From: https://blog.csdn.net/u010198746/article/details/143201799

相关文章

  • 如何将网页保存为纯净版PDF
    1问题描述当我们看到一篇不错的博客,我们可能会想到把他保存下来方便后面忘记了回来温习。保存的方式有很多种,可以直接收藏网页,如果这个博客是个纯文字版的那直接把文字复制然后本地创建一个文档保存下来就行。然而,这两种方式各自都存在不便之处。对于第一种保存的方式,网络......
  • (开题报告)django+vue基于Web的网上书店销售系统论文+源码
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容选题背景在当今数字化时代,电子商务蓬勃发展,网上书店作为其中的重要组成部分,具有广阔的市场前景。关于Web网上书店销售系统的研究,现有研究主要以大......
  • JavaScript 与 Rust 和 WebAssembly 集成
    偶然一次机会,接触了Rust的代码。当时想给团队小伙伴做演示,发现自己并不能在移动端按照文档生成演示demo。我就想,要是Rust代码能转化成JavaScript就好了。结果一搜,还真有。下面整理成文档,分享给大家。为大家解决问题,多提供一种思路、方式、方法。 一、分享的目的:▪由Rust、We......
  • 使用本地浏览器打开远程服务器生成的网页——详细教程
    使用本地浏览器打开远程服务器生成的网页——详细教程在日常开发或运维中,我们常常需要访问部署在远程服务器上的网页应用,例如JupyterNotebook、Web服务等。通过SSH端口转发,我们可以在不暴露远程服务器端口的情况下,使用本地浏览器直接访问远程服务器生成的网页。本文将......
  • 基于 Koa + Vue3!一个开源的 Linux 服务器 Web SSH 面板工具!
    大家好,我是Java陈序员。今天,给大家介绍一个Linux服务器WebSSH连接面板工具,基于Koa+Vue3实现!关注微信公众号:【Java陈序员】,获取开源项目分享、AI副业分享、超200本经典计算机电子书籍等。项目介绍EasyNode——一个客户端基于Vue3、服务端基于Koa实现的Linux......
  • HarmonyOS:基于Web组件构建网络应用(1)
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤博客园地址:为敢技术(https://www.cnblogs.com/strengthen/ )➤GitHub地址:https://github.com/strengthen➤原文地址:https://www.cnblogs.com/strengthen/p/18501721➤如果链接不是为敢技术的博客园地址,则可......
  • go esWebClient基于泛型的通用ES客户端eswebrequest封装
    go1.20自动完成结构体转换。测试用例packageeswebrequestimport("fmt""git.ichub.com/general/webcli120/goconfig/ichubconfig""git.ichub.com/general/webcli120/goconfig/ichublog/golog""git.ichub.com/general/webcli12......
  • WebStorm 和 Rider 现在对非商业用途免费
    JetBrains在程序员节这一天在官方博客上发布了一篇文章:《WebStorm和Rider现在对非商业用途免费》宣布了JetBrains将WebStorm和RiderIDE对非商业用途免费的许可模式变动。这一决策旨在降低使用JetBrainsIDE的门槛,帮助开发者学习、成长并保持创造力。非商业用途包括学习、开......
  • SHCTF(week 2)web-wp
    1.guess_the_number:F12后查看源码并下载,由于可以获得第一个数,要知道seed可以使得每次生成的随机数一样,我们考虑爆seed,写脚本如下:importrandomdefr1(seed):random.seed(seed)returnrandom.randint(1000000000,9999999999)forseedinrange(1000000,9999999):......
  • jspm基于Java web的在线餐饮管理系统的设计和实现(11862)
     有需要的同学,源代码和配套文档领取,加文章最下方的名片哦一、项目演示项目演示视频二、资料介绍完整源代码(前后端源代码+SQL脚本)配套文档(LW+PPT+开题报告)远程调试控屏包运行三、技术介绍Java语言SSM框架SpringBoot框架Vue框架JSP页面Mysql数据库IDEA/Eclipse开发......