最近在帮老婆做美国签证,需要填DS-160表,做到最后需要有五页的表需要选择yes和no,大部分客户的信息都选择NO,然后就机械的选择no no no~~~,next,no no no next ~~~no no no ~~~~好烦。既然是机械性的工作,那就用代码实现吧,做一个chrome插件,点击插件图标后本页的选择按钮全部选no,并挑到下一页。
1:
如何实现呢?
首先获取该页面的所有显示在页面的radio按钮
然后筛选出值为no的按钮 点击
再获取下一页按钮 点击
从chrome进入DS-160表Security and Background页,然后在页面上右键"审查元素",如下图
先选择放大镜,当放大镜变色后选择radio按钮,然后在右边就会找到描述这个按钮的代码,发现该按钮的tag为"input",type为"radio",value为"N".
再用相同的方式看看其他no按钮也是这样的,ok,点击Console. 执行下面的代码
v = document.getElementsByTagName('input');
var vshu = [];
for (var i = 0; i < v.length; i++) {
if (v[i].getAttribute('type') == 'radio' && v[i].getAttribute('value') == 'N')
vshu.push(v[i]);
}
查看vshu数组里面的内容,会发现里面存放的就是我们要点击的no按钮对象,然后点击每个对象
for (var i = 0; i < vshu.length; i++){
vshu[i].click();
next = document.getElementsByClassName('next')[0];
next.click();
最终代码
var clickFun = function() {
v = document.getElementsByTagName('input');
var vshu = [];
for (var i = 0; i < v.length; i++) {
if (v[i].getAttribute('type') == 'radio' && v[i].getAttribute('value') == 'N')
vshu.push(v[i]);
}
for (var i = 0; i < vshu.length; i++) {
vshu[i].click();
}
next = document.getElementsByClassName('next')[0];
next.click();
}
三个箭头指向的就是chrome插件,做哪个?怎么做?通过查询知道五角星的插件是page action,
另外两个属于browser action,browser action长驻浏览器,page action只有根据需要才会显示,很明显咱的需求要选择page action,因为只有那5个页面才会用到这个插件嘛。
要完成咱的需求,最少要用到4个文件manifest.json,icon.png,background.js,content_script.js
icon.png,要显示的图标,就像上面的那个五角星。
background.js 只在插件加载的时候运行一次,在这里可以用来处理插件本身的一些逻辑,比如监听图标的点击事件。
content_script.js 添加的是与页面交互的代码,比如上面的clickFun 函数。
manifest.json 其他文件可以任意起名字,只有manifest.json是唯一指定了文件名和文件格式的文件,程序会通过manifest.json的配置信息来设定相关内容。
首先是能在特定网页显示图标。
manifest.json
{
"manifest_version": 2,
"name": "clickNO",
"version": "1.0",
"description": "美国DS-160表 点NO工具",
"permissions": [
"tabs", "http://*/*"
],
"page_action": {
"default_icon": "images/icon.png",
"default_title": "clickNO"
},
"background": {
"scripts": [
"javascript/background.js"
]
},
"content_scripts": [
{
"matches": [
"https://ceac.state.gov/GenNIV/General/complete/*"
],
"js": [
"javascript/content_script.js"
]
}
]
}
function checkForValidUrl(tabId, changeInfo, tab) {
if (tab.url.indexOf('ceac.state.gov/GenNIV/General/complete') > -1) {
if(tab.url.indexOf('SecurityandBackground')>-1 ||tab.url.indexOf('workeducation3')>-1){
chrome.pageAction.show(tabId);//显示插件图标
}
}
}
chrome.tabs.onUpdated.addListener(checkForValidUrl);
content_script.js 文件内容可以为空。将四个文件放到同一个文件夹下,比如MyChromeextensions
然后在chrome地址栏,输入chrome://extensions/,会看到
点击打包扩展程序,会弹出对话框
扩展程序根目录,选择MyChromeextensions,私有秘钥文件 第一次可以不选择。点击 打包扩展程序后,会在 和MyChromeextensions的同级目录下生成pem文件,当下次打包的时候要在 私有秘钥文件中选择 这个pem文件。同时还生成了crx文件,将crx文件拖到 chrome://extensions/ 页面下就会安装你刚刚打包的插件了。
然后就是监听插件图标点击事件 执行clickFun()函数了。
clickFun()函数是要放到content_script.js文件中的,监听点击函数要放在background.js文件中,两文件之间怎么通信?通过消息传递(Message Passing)。
消息分为三种 one-time requests, long-lived connections, cross-extension messages,而我们需要的是第一种.
将background.js文件改为
function onClickListener(tab) {
chrome.tabs.getSelected(null,
function(tab) {
chrome.tabs.sendMessage(tab.id, {
greeting: "myChromeExtension"
},
function(response) {
console.log(response.farewell);
});
});
}
function checkForValidUrl(tabId, changeInfo, tab) {
if (tab.url.indexOf('ceac.state.gov/GenNIV/General/complete') > -1) {
if (tab.url.indexOf('SecurityandBackground') > -1 || tab.url.indexOf('workeducation3') > -1) {
chrome.pageAction.show(tabId);
chrome.pageAction.onClicked.addListener(onClickListener);//监听图标点击事件
}
}
}
chrome.tabs.onUpdated.addListener(checkForValidUrl);
chrome.extension.onMessage.addListener(function(request, sender, sendResponse) {
console.log(sender.tab ? "from a content script:" + sender.tab.url: "from the extension");
var greetin = request.greetin;
if (document.getElementsByTagName(greetin).length == 0) {
var newdiv = document.createElement(greetin);
document.firstElementChild.appendChild(newdiv);
clickFun();//执行需求逻辑代码
}
});
然后就是打包 安装。
完成~~~
文章浏览阅读436次。注:阿里云网站申请需要进行IPC备案,如果不通过备案仅可本机IP地址访问,其它IP地址访问失败或是提示未进行备案。解决办法:开始菜单-服务器管理器-管理(M)-添加角色和功能-按步骤添加Web服务器(IIs)注:云服务器选择的阿里云windows系统,同时使用的是IIS进行服务器配置。解决办法:清理浏览器缓存后刷新,或是更换成其它浏览器。问题2:关于更改网站内容,刷新仍然保存旧界面。问题1:关于云服务器中没有IIS管理器。_阿里云服务器部署iis
文章浏览阅读1.9k次,点赞4次,收藏2次。最近在使用VS Code遇到了 OmniSharp 的各种报错导致没有了代码提示。这个问题是由于本身C#的更新版本造成的。1.在设置里搜索 Use Modern Net,取消勾选,重启 VS Code!2.改了依然有错误,提示或Could not locate MSBuild instance to register with OmniSharp.C# extension插件回到1.24.4,同时把Visual Studio Code Editor包升级到1.2.5又可以了。_vs code没有c#的提示
文章浏览阅读2.2k次,点赞67次,收藏53次。快速搭建起一个属于自己的ChatGPT,直接跟着教程一步一步做即可。_chatgpt3.5 docker部署
文章浏览阅读2.7w次,点赞24次,收藏283次。一、前提:安装hive所需要的虚拟机环境为虚拟机安装有Hadoop并且集群成功,同时Hadoop需要在启动状态下,同时需要安装有mysql。不需要有zookeeper和HA,由于HA中含有大量进程,启动会占用很多资源,建议不要有HA二、安装步骤:1、上传jar包至/usr/local/soft将hive-3.1.2上传到虚拟机中的/usr/local/soft目录下2、解压并重命名tar -zxvf apache-hive-3.1.2-bin.tar.gz# 重命名mv ap_hive安装与配置详解
了解Java NIO
QuickList是由多个 ziplist 组成的双向链表,每个 ziplist 存储一定数量的元素。优点:结合了 ziplist 和双向链表的优点,既节省空间,又提升了修改操作的性能。使用场景: 在列表键元素较多或包含较大元素时使用。ziplist补充(ziplist缺点-链式扩容&级联更新)当一个entry被插入的时候,我们需要设置下一个entry中的prevlen字段为新插入entry的长度。
文章浏览阅读2.1k次。---------------------JavaEE+Android开发、Java培训、期待与您交流! ---------------------- 交通灯管理系统一.交通灯管理项目的需求 模拟实现十字路口的交通灯管理系_城市道路十字路口信号灯控制系统,模拟实现十字路口的信号控制功能。要实现基
文章浏览阅读667次。除此之外,值得强调的是,不管是用两格缩进还是四格缩进,在使用 tab 键进行缩进时要注意缩进格数,因为在不同的IDE,tab键的缩进格数是不一致的,当然IDE也提供了设置tab键的缩进格数来帮助我们解决此问题,所以到底使用空格还是tab可以根据个人习惯选择。但是,将大括号另起一行,也有它的优势,那就是,左右括号可以垂直对齐,哪些代码属于哪一个代码块,更加一目了然。一般可以借助类的信息来简化属性、函数的命名,利用函数的信息来简化函数参数的命。作用域小的变量(比如临时变量),可以适当地选择短一些的命名方式。_java代码编写怎么才能看起来不乱 好多大括号
文章浏览阅读6.3k次,点赞3次,收藏10次。将这段时间了解的MySQL分片技术和主从复制只是整理一下画了思维导图记录一下,希望能给需要的人一些帮助P.S.:个人整理,可能会有错误之处,还望指出~要解决的问题1、海量数据的操作超出单表、单库的最大限制2、访问压力超出数据库系统限制,性能下降3、数据库复制、容灾等问题解决方案一、采用数据分表分库提高数据库的性能限制1、可选Sharding策略2、Sharding实现的层面可以为: (1)数据访问_什么是分片技术 mysal
文章浏览阅读465次。一、何为热部署目的:少应用程序打包和发布的时间。当一个应用发布在tomcat或者Jboss等容器上时,如果应用程序升级,此时不需要关闭和启动服务器,只需要加载更新之后的jar/war包,就可以更新应用程序。做法:这是Java应用程序是使用classLoader来加载的,在有升级后的应用后,服务器会断开与旧的应用程序的连接,和新的应用重新建立classLoader连接。此时不会影响其他应用的正常..._什么工具可以热部署tomcat
文章浏览阅读595次。Firefox浏览器是 目前最好用的浏览器产品,当微软IE浏览器因为安全问题补丁不断,当Google Chrome浏览器因为云计算太超前而生不逢时,Firefox就成了最好的选择。但是,没装插件的Firefox就如同不穿衣服的美女,上网冲浪总觉得 少点什么。所以,再此整理并隆重推荐10大Firefox浏览器必备插件,这些插件源自于Mozilla官方附加组件网站,都经过实际测试并使用半年以上,适用范..._火狐十大必用插件
文章浏览阅读4.9k次,点赞2次,收藏4次。前言:在导入一个demo出现该问题,问题点是Android studio3.2版本以后,AAPT2 (Android Asset Packaging Tool 2)的源代码就是谷歌的Maven存储库。要使用AAPT2,请确保构建中有一个谷歌()依赖项gradle文件如下:buildscript { repositories { jcenter() ma..._could not find com.android.tools.build:aapt2:3.2.0-4818971.