由于本人每天需要登录网站查看数据并分析统计汇总,而每次机械式地搜索和简单计算,十分繁琐。我们可以写个定时任务,每天根据cookie获取网站数据并遍历统计。
脚本得以成功执行的关键是需要获取到COOKIE
故,写了个谷歌插件用来上报COOKIE

{
"manifest_version": 3,
"name": "Get Cookie",
"description": "get cookie",
"version": "1.0.0.1",
"action": {
"default_popup": "index.html",
"default_icon": "images/icon.png"
},
"host_permissions": [
"http://*/*",
"https://*/*"
],
"permissions": [
"cookies",
"tabs"
]
}
<html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <link rel="stylesheet" type="text/css" href="mystyle.css"> </head> <body> <div id="container"> <div class="sub"> <div class="card"> <form action="#"> <textarea id="cookie" required readonly name="cookie" value="" placeholder="cookie"></textarea> <br> <br> <textarea id="hostnm" required readonly name="hostnm" value="" placeholder="host name"></textarea> <br> <br> <input id="username" type="text" required name="username" value="" class="username" style="height:30px;font-size: 15px;line-height:30px;" placeholder="请输入投放账户ID" autocomplete="on"> <br> <br> <input id="password" type="password" required name="password" value="" class="password"style="height:30px;font-size: 15px;line-height:30px;"placeholder="请输入密码"><br> <br> <label>环境:</label> <input type="radio" name="env" value="2" checked /> 正式 <input type="radio" name="env" value="1" /> 测试 <br><br> <input type="button" id="btn" style="background-color: #b3d4fc;width: 60%;height: 30px" value="验证上传"> </form> </div> </div> </div> <script src="script.js"></script> </body> </html>
#container {
width: 250px;
word-break: break-all;
}
.login{
margin: 0 auto;
position: relative;
top: 100px;
height: 500px;
width: 400px;
border-color: aqua;
}
.card{
width: 75%;
margin: auto;
}
const $container = document.getElementById('container')
document.addEventListener('DOMContentLoaded', () => {
chrome.tabs.query({ 'active': true, 'windowId': chrome.windows.WINDOW_ID_CURRENT },
function (tabs) {
var url = new URL(tabs[0].url)
document.getElementById("hostnm").value = url.host
var hostarr = url.host.split('.')
hostarr.shift()
var curhost = hostarr.join(".");
console.log(curhost)
chrome.cookies.getAll({
domain: curhost
}, (cookies) => {
console.dir(cookies);
cookies.map((c) => {
document.getElementById("cookie").value += c.name + "=" + c.value+"; "
})
})
var btn=document.getElementById("btn");
btn.onclick=function () {
var username=document.getElementById("username").value;//获取用户名input的value
var password=document.getElementById("password").value;
var cookie=document.getElementById("cookie").value;
var hostnm=document.getElementById("hostnm").value;
var env = 2;
var obj = document.getElementsByName("env")
for (var i = 0; i < obj.length; i++) {
if (obj[i].checked) {
env = obj[i].value;
}
}
console.log("env: " + env)
console.log("username: " + username)
console.log("password: " + password)
console.log("cookie: " + cookie)
console.log("hostnm: " + hostnm)
if(username == undefined || username.trim() == ''){
alert("请输入 投放账户ID")
return false;
}
if(password == undefined || password.trim() == ''){
alert("请输入 密码")
return false;
}
if(cookie == undefined || cookie.trim() == ''){
alert("获取COOKIE失败")
return false;
}
if(hostnm == undefined || hostnm.trim() == ''){
alert("获取域名失败")
return false;
}
if(hostnm.trim().indexOf('你想抓去的页面域名') == -1){
alert("非需要抓取页面")
return false;
}
username = username.trim();
password = password.trim();
cookie = cookie.trim();
hostnm = hostnm.trim();
var data= {
'username':username,'password':password,'env':env,'cookie':cookie,'hostnm':hostnm
}
console.log(data)
var stringData=JSON.stringify(data);
var querydData = Object.keys(data).map(key => key + '=' + data[key]).join('&');
var ajax=null;
if(window.XMLHttpRequest) {
ajax=new XMLHttpRequest();
}else {
ajax=new ActiveXObject("Microsoft.XMLHTTP");
}
var posturl = "http://测试域名/api/upcookie";
if(env == 2){
posturl = "https://正式域名/api/upcookie"
}
ajax.open("POST",posturl,true);
// ajax.open("GET",posturl+'?'+querydData,true);
ajax.onreadystatechange=function () {
if(ajax.readyState==4){
if(ajax.status==200){
var demo=ajax.responseText;
var demojson = JSON.parse(demo);
if(demojson.success){
alert("上传成功")
}else{
alert(demojson.msg)
}
}else{
alert("服务器繁忙,请稍后重试")
}
};
}
ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
ajax.send(querydData);
}
}
);
})


在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/
我对最新版本的Rails有疑问。我创建了一个新应用程序(railsnewMyProject),但我没有脚本/生成,只有脚本/rails,当我输入ruby./script/railsgeneratepluginmy_plugin"Couldnotfindgeneratorplugin.".你知道如何生成插件模板吗?没有这个命令可以创建插件吗?PS:我正在使用Rails3.2.1和ruby1.8.7[universal-darwin11.0] 最佳答案 随着Rails3.2.0的发布,插件生成器已经被移除。查看变更日志here.现在
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
是的,我知道最好使用webmock,但我想知道如何在RSpec中模拟此方法:defmethod_to_testurl=URI.parseurireq=Net::HTTP::Post.newurl.pathres=Net::HTTP.start(url.host,url.port)do|http|http.requestreq,foo:1endresend这是RSpec:let(:uri){'http://example.com'}specify'HTTPcall'dohttp=mock:httpNet::HTTP.stub!(:start).and_yieldhttphttp.shou
我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm
有没有办法在这个简单的get方法中添加超时选项?我正在使用法拉第3.3。Faraday.get(url)四处寻找,我只能先发起连接后应用超时选项,然后应用超时选项。或者有什么简单的方法?这就是我现在正在做的:conn=Faraday.newresponse=conn.getdo|req|req.urlurlreq.options.timeout=2#2secondsend 最佳答案 试试这个:conn=Faraday.newdo|conn|conn.options.timeout=20endresponse=conn.get(url
我有用于控制用户任务的Rails5API项目,我有以下错误,但并非总是针对相同的Controller和路由。ActionController::RoutingError:uninitializedconstantApi::V1::ApiController我向您描述了一些我的项目,以更详细地解释错误。应用结构路线scopemodule:'api'donamespace:v1do#=>Loginroutesscopemodule:'login'domatch'login',to:'sessions#login',as:'login',via::postend#=>Teamroutessc
我有一个存储主机名的Ruby数组server_names。如果我打印出来,它看起来像这样:["hostname.abc.com","hostname2.abc.com","hostname3.abc.com"]相当标准。我想要做的是获取这些服务器的IP(可能将它们存储在另一个变量中)。看起来IPSocket类可以做到这一点,但我不确定如何使用IPSocket类遍历它。如果它只是尝试像这样打印出IP:server_names.eachdo|name|IPSocket::getaddress(name)pnameend它提示我没有提供服务器名称。这是语法问题还是我没有正确使用类?输出:ge
我想获取模块中定义的所有常量的值:moduleLettersA='apple'.freezeB='boy'.freezeendconstants给了我常量的名字:Letters.constants(false)#=>[:A,:B]如何获取它们的值的数组,即["apple","boy"]? 最佳答案 为了做到这一点,请使用mapLetters.constants(false).map&Letters.method(:const_get)这将返回["a","b"]第二种方式:Letters.constants(false).map{|c
我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI