js提取新浪邮箱的信用卡
js提取用户新浪邮箱中的信用卡信息,是js非nodejs。
对比py,之前就做不好,出现了复杂点选验证码。js的开发速度只需要py的三分之一,甚至十分之一。
js在客户端执行,py在后端执行,py要实现实时高并发,在应对2000个并发时候,需要买几百台服务器。js节约这些钱。如果某一步使用了selenium需要上千台服务器。
可以登录后打开邮箱页面时候,执行这个来测试。就能获取到别人的信息了。实际是app。
一定是要在新浪邮箱页面打开console控制台,不能在别的网站打开console执行下面的代码,否则是跨域的,请求不到,要不然开发者在自己网站的js脚本写个ajax,请求淘宝 支付宝的网站api,然后把结果传到后台,你的信息都被别人知道了,这是不可能做到的。
//消除空格
String.prototype.trim = function()
{
return this.replace(/(^\s*)|(\s*$)/g, "");
}; //正则防止出错
String.prototype.match2 = function(regObj)
{
var matchArray = this.match(regObj);
if (matchArray && matchArray.length == 2){
return matchArray[1];
}
else{
return '';
}
}; function getInnerText( cssselector){
var element = document.querySelector(cssselector);
if(element){
return element.innerText;
}
else {
console.error("没有找到 " + cssselector + " 的元素");
return "";
}
} //获取元素
function myParseFunction(domObj, cssselector){
var obj = domObj.querySelector(cssselector);
if(obj){
return obj.innerText;
}
else{
console.error("没有找到 " + cssselector + " 的元素");
return "";
}
} // 定义全局变量
//var sid = window.location.href.match(/sid=(\S+)#/)[1]; var KEYWORD_DICK = {
"jiaotong":"交通银行信用卡电子账单",
"jianshe": "中国建设银行信用卡电子账单",
"zhaoshang":"招商信用卡月账单",
"guangfa":"广发信用卡电子账单",
"pingan":"平安信用卡月对账单",
"zhongxin": "中信信用卡月账单"
}; //存放每个银行的邮件id
midObj = {};
for (var key in KEYWORD_DICK){
midObj[key] = [];
} function searchMail(keyword){
console.debug('开始搜索' + KEYWORD_DICK[keyword] +'的所有邮件id');
var content = KEYWORD_DICK[keyword];
var url = 'https://mail.aliyun.com/alimail/ajax/mail/queryMailList.txt?_timestamp_=1517642178006';
var data = {
showFrom:1,
query:'{"keywordFields":5,"keywords":["' + content +'"],"advancedSearch":true}',
fragment:-1,
offset:0,
length:25,
_csrf_token_:$.cookie('_csrf_token_'),
_root_token_:$.cookie('_root_token_'),
_refer_hash_:window.location.href.match(/#(.*)/)[1],
_tpl_:'DEFAULT'
}; var res = $.ajax({
type: "POST",
url:url,
data: data,
async: false
});
var htmlStr = res.responseText;
console.debug('搜索邮件的源码是:' + htmlStr);
var midsMatch = htmlStr.match(/mailId":".*?"/g) || [];
//console.debug(midsMatch);
for (var index=0; index<midsMatch.length; index++){
var mid = midsMatch[index].match(/mailId":"(.*?)"/)[1];
midObj[keyword].push(mid);
}
//console.debug(midObj);
} // searchMail('jianshe') function readMail(mid) {
// url https://mail.163.com/js6/read/readhtml.jsp?mid=364:xtbBbBqIbVc6-6WyKQAAs-_30c7:bdc2:h:b:8&font=15&color=064977 var url = "https://mail.aliyun.com/alimail/ajax/mail/loadMail.txt?_timestamp_=1517645971062";
var data = {
mailId:mid,
charset:'',
full:1,
allowAutoQuote:1,
_csrf_token_:$.cookie('_csrf_token_'),
_root_token_:$.cookie('_root_token_'),
_refer_hash_:h=window.location.href.match(/#(.*)/)[1],
_tpl_:'DEFAULT'
};
console.debug('请求邮件详情的url是: ' + url);
var res = $.ajax({
type: "POST",
url:url,
data: data,
async: false
}); //console.debug(res.responseText);
var content = res.responseText.match2(/({[\s\S]*})/);//.match2(/<string name="content">([\s\S]*?)<\/string>/);
// console.debug('获取的邮件详情是:');
// console.debug(content);
//下面是转义,例如<转为<
var ifame = document.createElement("ifame");
ifame.innerHTML = content;
var resText0 = ifame.innerText;
//console.debug('resText',resText);
var contentObj = JSON.parse(resText0);
var resText1 = contentObj['data']['body']; var ifame = document.createElement("ifame");
ifame.innerHTML = resText1;
var resText = ifame.innerHTML; console.debug('resTextstart\n',resText,'resTextend\n');
return resText; } function parseZhaoShang(resText) {
var ifame = document.createElement("ifame");
ifame.innerHTML = resText;
var data = {};
data['username'] = resText.match2(/尊敬的\s?(\S+)\s?[先|生|女|士]{2}/);
data["bill_month"] = resText.match2(/以下是您的招商银行信用卡(\d+月)账单/);
data["bank"] = "招商银行";
if (RegExp("尊敬的").test(resText)){ //详细账单
data["due_date"] = myParseFunction(ifame, "#fixBand42 > table > tbody > tr > td > table > tbody > tr > td:nth-child(3) > div > font");
data["need_pay"] = myParseFunction(ifame, "#fixBand40 > table > tbody > tr > td > table > tbody > tr > td:nth-child(3) > div > font");
data["min_need_pay"]=myParseFunction(ifame, "#fixBand40 > table > tbody > tr > td > table > tbody > tr > td:nth-child(5) > div > font");
data["card_limit"] = myParseFunction(ifame, "#fixBand38 > table > tbody > tr > td > table > tbody > tr > td:nth-child(5) > div > font");
data["cash_limit"] = "";
data["bill_peroid"] = myParseFunction(ifame, "#fixBand38 > table > tbody > tr > td > table > tbody > tr > td:nth-child(3) > div > font");
data["avb_point"] = myParseFunction(ifame, "#fixBand23 > table > tbody > tr > td > table > tbody > tr > td:nth-child(2) > div > font");
data["card_number"] = "";
data["last_bill"] = myParseFunction(ifame, "#fixBand13 > table > tbody > tr > td > table > tbody > tr > td:nth-child(3) > div > font");
data["bill_new"] = myParseFunction(ifame, "#fixBand13 > table > tbody > tr > td > table > tbody > tr > td:nth-child(5) > div > font");
data["bill_paid"] = myParseFunction(ifame, "#fixBand13 > table > tbody > tr > td > table > tbody > tr > td:nth-child(4) > div > font");
// data["bill_left"] = document.querySelector().innerText;
data["bill_adjust"] = myParseFunction(ifame, "#fixBand13 > table > tbody > tr > td > table > tbody > tr > td:nth-child(6) > div > font");
data["cycle_interest"] = myParseFunction(ifame, "#fixBand13 > table > tbody > tr > td > table > tbody > tr > td:nth-child(7) > div > font ");
}
else{//简约账单
data["due_dae"] = myParseFunction(ifame, "#fixBand18 > table > tbody > tr:nth-child(2) > td > table > tbody > tr > td:nth-child(2) > div > font");
data["nend_pay"] = myParseFunction(ifame, "#fixBand57 > table > tbody > tr > td > table > tbody > tr > td:nth-child(2) > div > font");
data["min_need_pay"] = myParseFunction(ifame, "#fixBand46 > table > tbody > tr > td > table > tbody > tr > td:nth-child(2) > div > font");
}
return data
} function parseGuangFa(resText) {
var ifame = document.createElement("ifame");
ifame.innerHTML = resText;
var data = {};
data['username'] = resText.match2(/尊敬的\s?(\S+)\s?[先|生|女|士]{2}/);
data["bill_month"] = resText.match2(/(\d+年\d+月)/);
data["bank"] = "广发银行";
if (RegExp("感谢您使用广发银行信用卡").test(resText)) { //2015年12月(含)以后的账单
data["bill_peroid"] = resText.match2(/账单周期:([\s\d\/至]+)/);
if (RegExp("积分明细").test(resText)) { //详细账单,2016年8月(含)以后邮件不再显示账单明细
data["due_date"] = myParseFunction(ifame, "#fixBand4 > table > tbody > tr > td > table > tbody > tr > td:nth-child(5) > div > font");
data["need_pay"] = myParseFunction(ifame, "#fixBand4 > table > tbody > tr > td > table > tbody > tr > td:nth-child(3) > div > font");
data["min_need_pay"] = myParseFunction(ifame, "#fixBand4 > table > tbody > tr > td > table > tbody > tr > td:nth-child(4) > div > font");
data["card_limit"] = myParseFunction(ifame, "#fixBand4 > table > tbody > tr > td > table > tbody > tr > td:nth-child(7) > div > font");
// data["cash_limit"] = "";
data["avb_point"] = myParseFunction(ifame, "#fixBand7 > table > tbody > tr > td > table > tbody > tr > td:nth-child(7) > div > font");
data["card_number"] = myParseFunction(ifame, "#fixBand4 > table > tbody > tr > td > table > tbody > tr > td:nth-child(2) > div > font");
data["last_bill"] = myParseFunction(ifame, "#fixBand4 > table > tbody > tr > td > table > tbody > tr > td:nth-child(5) > div > font");
data["bill_new"] = myParseFunction(ifame, "#fixBand4 > table > tbody > tr > td > table > tbody > tr > td:nth-child(6) > div > font");
data["bill_paid"] = myParseFunction(ifame, "#fixBand4 > table > tbody > tr > td > table > tbody > tr > td:nth-child(7) > div > font");
// data["bill_adjust"] = myParseFunction(ifame, "");
// data["cycle_interest"] = myParseFunction(ifame, "");
}
else { //2016年8月以后的账单
data["due_date"] = myParseFunction(ifame, "#fixBand4 > table > tbody > tr > td > table > tbody > tr > td:nth-child(5) > div > font");
data["need_pay"] = myParseFunction(ifame, "#fixBand4 > table > tbody > tr > td > table > tbody > tr > td:nth-child(3) > div > font");
data["min_need_pay"] = myParseFunction(ifame, "#fixBand4 > table > tbody > tr > td > table > tbody > tr > td:nth-child(4) > div > font");
data["card_limit"] = myParseFunction(ifame, "#fixBand4 > table > tbody > tr > td > table > tbody > tr > td:nth-child(7) > div > font");
// data["cash_limit"] = "";
// data["avb_point"] = myParseFunction(ifame, "");
data["card_number"] = myParseFunction(ifame, "#fixBand4 > table > tbody > tr > td > table > tbody > tr > td:nth-child(2) > div > font");
data["last_bill"] = myParseFunction(ifame, "#reportPanel2 #fixBand4 > table > tbody > tr > td > table > tbody > tr > td:nth-child(5) > div > font");
data["bill_new"] = myParseFunction(ifame, "#reportPanel2 #fixBand4 > table > tbody > tr > td > table > tbody > tr > td:nth-child(6) > div > font");
data["bill_paid"] = myParseFunction(ifame, "#reportPanel2 #fixBand4 > table > tbody > tr > td > table > tbody > tr > td:nth-child(7) > div > font");
// data["bill_adjust"] = myParseFunction(ifame, "");
// data["cycle_interest"] = myParseFunction(ifame, "");
};
}
else{ //2015年11月以前的账单
data["bill_peroid"] = myParseFunction(ifame, "#fixBand5 > table > tbody > tr > td > table > tbody > tr > td:nth-child(2) > div > font");
data["due_date"] = myParseFunction(ifame, "#fixBand7 > table > tbody > tr > td:nth-child(4) > div > font");
data["need_pay"] = myParseFunction(ifame, "#fixBand7 > table > tbody > tr > td:nth-child(2) > div > font");
data["min_need_pay"]=myParseFunction(ifame, "#fixBand7 > table > tbody > tr > td:nth-child(3) > div > font");
data["card_limit"] = myParseFunction(ifame, "#fixBand5 > table > tbody > tr > td > table > tbody > tr > td:nth-child(4) > div > font");
data["avb_point"] = myParseFunction(ifame, "#fixBand4 > table > tbody > tr > td:nth-child(9) > div > font");
data["card_number"] = myParseFunction(ifame, "#fixBand7 > table > tbody > tr > td:nth-child(1) > div > font");
data["last_bill"] = myParseFunction(ifame, "#fixBand4 > table > tbody > tr > td:nth-child(3) > div > font");
data["bill_new"] = myParseFunction(ifame, "#fixBand4 > table > tbody > tr > td:nth-child(5) > div > font");
data["bill_paid"] = myParseFunction(ifame, "#fixBand4 > table > tbody > tr > td:nth-child(7) > div > font");
}
return data
} function parsePingAn(resText) {
var ifame = document.createElement("ifame");
ifame.innerHTML = resText;
var data = {};
data['username'] = resText.match2(/尊敬的\s?(\S+)\s?[先|生|女|士]{2}/);
data["bill_month"] = myParseFunction(ifame, "#mailContentContainer > table > tbody > tr:nth-child(8) > td > table > tbody > tr > td > table > tbody > tr > td:nth-child(1) > table > tbody > tr:nth-child(2) > td").match2(/以下是您(.+)的信用卡对账单/);
data["bank"] = "平安银行";
data["due_date"] = myParseFunction(ifame, "#mailContentContainer > table > tbody > tr:nth-child(9) > td > table > tbody > tr > td:nth-child(1) > table > tbody > tr:nth-child(2) > td > table > tbody > tr:nth-child(2) > td:nth-child(2) > span > strong");
data["need_pay"] = myParseFunction(ifame, "#mailContentContainer > table > tbody > tr:nth-child(9) > td > table > tbody > tr > td:nth-child(3) > table > tbody > tr:nth-child(2) > td > table > tbody > tr > td:nth-child(2) > table > tbody > tr:nth-child(1) > td ");
data["min_need_pay"]=myParseFunction(ifame, "#mailContentContainer > table > tbody > tr:nth-child(9) > td > table > tbody > tr > td:nth-child(3) > table > tbody > tr:nth-child(2) > td > table > tbody > tr > td:nth-child(2) > table > tbody > tr:nth-child(3) > td");
data["card_limit"] = myParseFunction(ifame, "#mailContentContainer > table > tbody > tr:nth-child(9) > td > table > tbody > tr > td:nth-child(1) > table > tbody > tr:nth-child(2) > td > table > tbody > tr:nth-child(3) > td:nth-child(2)");
data["cash_limit"] = myParseFunction(ifame, "#mailContentContainer > table > tbody > tr:nth-child(9) > td > table > tbody > tr > td:nth-child(1) > table > tbody > tr:nth-child(2) > td > table > tbody > tr:nth-child(4) > td:nth-child(2)");
// data["bill_peroid"] = myParseFunction(ifame, "");
data["avb_point"] = myParseFunction(ifame, "#mailContentContainer > table > tbody > tr:nth-child(13) > td > table > tbody > tr:nth-child(3) > td:nth-child(1)");
// data["card_number"] = "";
data["last_bill"] = myParseFunction(ifame, "#mailContentContainer > table > tbody > tr:nth-child(21) > td > table > tbody > tr:nth-child(2) > td:nth-child(2)");
data["bill_new"] = myParseFunction(ifame, "#mailContentContainer > table > tbody > tr:nth-child(21) > td > table > tbody > tr:nth-child(2) > td:nth-child(4)");
data["bill_paid"] = myParseFunction(ifame, "#mailContentContainer > table > tbody > tr:nth-child(21) > td > table > tbody > tr:nth-child(2) > td:nth-child(3)");
data["bill_adjust"] = myParseFunction(ifame, "#mailContentContainer > table > tbody > tr:nth-child(21) > td > table > tbody > tr:nth-child(2) > td:nth-child(5)");
data["cycle_interest"] = myParseFunction(ifame, "#mailContentContainer > table > tbody > tr:nth-child(21) > td > table > tbody > tr:nth-child(2) > td:nth-child(6)");
return data
} function parseZhongXin(resText) {
//var resText = document.documentElement.outerHTML;
var ifame = document.createElement("ifame");
ifame.innerHTML = resText;
var data = {};
data["bank"] = "中信银行";
data['username'] = resText.match2(/尊敬的\s?(\S+)\s?[先|生|女|士]{2}/);
data["bill_month"] = resText.match2(/(\d+年\d+月)账单已产生/);
data["bill_peroid"] = resText.match2(/记录了您(\S+)账户变动信息/);
data["due_date"] = resText.match2(/到期还款日:([\d年月日]+)/);
data["need_pay"] = myParseFunction(ifame, "#fixBand16 > table > tbody > tr > td > table > tbody > tr > td:nth-child(3) > div > font");
data["min_need_pay"]=myParseFunction(ifame, "#fixBand11 > table > tbody > tr > td > table > tbody > tr > td:nth-child(3) > div > font");
data["card_limit"] = myParseFunction(ifame, "#fixBand12 > table > tbody > tr:nth-child(1) > td > table > tbody > tr > td:nth-child(3) > div > font");
data["cash_limit"] = myParseFunction(ifame, "#fixBand13 > table > tbody > tr:nth-child(1) > td > table > tbody > tr > td:nth-child(3) > div > font");
// data["avb_point"] = myParseFunction(ifame, "");
data["card_number"] = myParseFunction(ifame, "#fixBand5 > table > tbody > tr > td > table > tbody > tr > td:nth-child(2) > div > font");
data["last_bill"] = myParseFunction(ifame, "#fixBand5 > table > tbody > tr > td > table > tbody > tr > td:nth-child(4) > div > font");
data["bill_new"] = myParseFunction(ifame, "#fixBand5 > table > tbody > tr > td > table > tbody > tr > td:nth-child(6) > div > font");
data["bill_paid"] = myParseFunction(ifame, "#fixBand5 > table > tbody > tr > td > table > tbody > tr > td:nth-child(5) > div > font"); // data["bill_adjust"] = myParseFunction(ifame, "");
// data["cycle_interest"] = myParseFunction(ifame, "");
return data
} function parseJiaoTong(resText){
//var resText = document.documentElement.outerHTML;
var ifame = document.createElement("ifame");
ifame.innerHTML = resText;
var data = {};
data['bank'] = '交通银行';
data['username'] = resText.match2(/尊敬的 (\S+)您好!<\/p>/);
data["bill_month"] = resText.match2(/以下是您(\S+?月)份的信用卡电子账单。/);
data["bill_peroid"] = resText.match2(/账单周期:(.*?)<\/p>/);
data["due_date"] = myParseFunction(ifame,'#billInfo1 > table > tbody > tr:nth-child(1) > td:nth-child(2)');
data["need_pay"] = myParseFunction(ifame, '#billInfo1 > table > tbody > tr:nth-child(2) > td:nth-child(2)');
data["min_need_pay"]= myParseFunction(ifame, '#billInfo1 > table > tbody > tr:nth-child(3) > td:nth-child(2)');
data["card_limit"] = myParseFunction(ifame, '#billInfo1 > table > tbody > tr:nth-child(4) > td:nth-child(2)');
data["cash_limit"] = myParseFunction(ifame, '#billInfo1 > table > tbody > tr:nth-child(5) > td:nth-child(2)');
data["card_number"] = resText.match2(/卡号:(\S+?)<\/p>/);
data['last_bill'] = myParseFunction(ifame, '#container > div:nth-child(6) > table > tbody > tr:nth-child(2) > td:nth-child(3)');
data['bill_paid'] = myParseFunction(ifame, '#container > div:nth-child(6) > table > tbody > tr:nth-child(2) > td:nth-child(4)');
data['bill_new'] = myParseFunction(ifame, '#container > div:nth-child(6) > table > tbody > tr:nth-child(2) > td:nth-child(5)');
data['avb_point'] = myParseFunction(ifame, '#billInfo20 > table > tbody > tr:nth-child(2) > td:nth-child(2)'); return data;
} function parseJianShe(resText){
//var resText = document.documentElement.outerHTML;
var ifame = document.createElement("ifame");
ifame.innerHTML = resText;
var data = {};
data['bank'] = '建设银行';
data['username'] = resText.match2(/尊敬的(.*?),您好!<\/font>/);
data["bill_month"] = resText.match2(/<br>至(.*?月).*?日<\/font><\/b>信用卡账户变动情/);
//data["bill_peroid"] = resText.match2(/sans-serif">(.*?)<br>至.*?<\/font>/) + resText.match2(/sans-serif">.*?<br>(至.*?)<\/font>/);
data["bill_peroid"] = resText.match2(/(\d+年\d+月\d+日)<br>至\d+年\d+月\d+日/) + resText.match2(/\d+年\d+月\d+日<br>(至\d+年\d+月\d+日)/);
data["due_date"] = myParseFunction(ifame,'td[width="34%"] > table > tbody > tr:nth-child(3) > td:nth-child(2) > font > b');
data["need_pay"] = myParseFunction(ifame, 'td[width="62%"] > table > tbody > tr:nth-child(3) > td:nth-child(2) > font > b');
data["min_need_pay"]= myParseFunction(ifame, 'td[width="62%"] > table > tbody > tr:nth-child(3) > td:nth-child(3) > font');
data["card_limit"] = myParseFunction(ifame, 'td[width="34%"] > table > tbody > tr:nth-child(4) > td:nth-child(2) > font > a').trim();
data["cash_limit"] = myParseFunction(ifame,'td[width="34%"] > table > tbody > tr:nth-child(5) > td:nth-child(2) > font');
//data["card_number"] = resText.match2(/卡号:(\S+?)<\/p>/);
data['last_bill'] = myParseFunction(ifame, 'table[width="875"] > tbody > tr:nth-child(4) > td:nth-child(3) > font');
//data['bill_paid'] = myParseFunction(ifame, "#table4 > tbody > tr:nth-child(2) > td:nth-child(4)");
//data['bill_new'] = myParseFunction(ifame, "#table4 > tbody > tr:nth-child(2) > td:nth-child(5)");
//data['avb_point'] = myParseFunction(ifame, "#table5 > tbody > tr:nth-child(2) > td:nth-child(2)"); return data;
} // 定义解析函数映射字典
var MAP_PARSER_FUNCTION = {
"zhaoshang": parseZhaoShang,
"guangfa": parseGuangFa,
"pingan": parsePingAn,
"zhongxin": parseZhongXin,
"jiaotong": parseJiaoTong,
"jianshe": parseJianShe }; var datas = [];
function extractBank(keyword){
searchMail(keyword);
console.debug(keyword+ '的mids是:');
console.debug(midObj[keyword]); for (var indexi=0;indexi< midObj[keyword].length; indexi++){
var read_res = readMail(midObj[keyword][indexi]);
var data = MAP_PARSER_FUNCTION[keyword](read_res);
datas.push(data);
console.debug('提取的 ' + KEYWORD_DICK[keyword] + ' 单个信息是:');
console.debug(data);
}
} function runAll(){
for (var key in KEYWORD_DICK){
extractBank(key);
}
console.debug('完成提取');
console.debug(datas);
console.debug(JSON.stringify(datas));
return JSON.stringify(datas);
} //runAll(); // extractBank('guangfa');
// extractBank('jiaotong');
// extractBank('jianshe');
//
// console.debug('完成提取');
// console.debug(datas);
//
// console.debug(JSON.stringify(datas));
js提取新浪邮箱的信用卡的更多相关文章
- VC POST表单——登录验证新浪邮箱
1.本机环境: Windows XP SP3.ADSL 2.开发工具: WildPackets OmniPeek V5.1.4 Visual C++ 6.0 IE6.0 FlexEdit V2.3.1 ...
- Java Web(十三) 使用javamail进行发送邮件,(使用QQ,163,新浪邮箱服务器)
加油加油. --WH 一.发送邮件的原理 在了解其原理之前,先要知道两个协议,SMTP和POP3 SMTP:Simple Mail Transfer Protocol,即简单邮件传输协议,发送邮件的协 ...
- 在foxmail和outlook中设置QQ邮箱、gmail邮箱、新浪邮箱、微软邮箱、网易邮箱等的方法
怎么用邮件客户端如outlook和foxmail来设置各种邮箱 很多人平时都是在网页上面收发邮件,这个很简单,不用其他的设置,不过在客户端上设置收发邮件还是很不错的,今天就来讲讲各种邮箱在outloo ...
- web开发(九) 使用javamail进行发送邮件,(使用QQ,163,新浪邮箱服务器)
在网上看见一篇不错的文章,写的详细. 以下内容引用那篇博文.转载于<http://www.cnblogs.com/whgk/p/6506027.html>,在此仅供学习参考之用. 一.发送 ...
- js获取新浪天气接口
<!doctype html> <html class="no-js fixed-layout"> <head> <meta charse ...
- JS 利用新浪接口通过IP地址获取当前所在城市
<html xmlns="http://www.w3.org/1999/xhtml"><head runat="server">< ...
- python使用mechanize模拟登陆新浪邮箱
mechanize相关知识准备: mechanize.Browser()<br># 设置是否处理HTML http-equiv标头 set_handle_equiv(True)<br ...
- js或jQuery中 邮箱跳转的问题,跳转到指定邮箱(通过layui的ifram实现)
对刚做的东西记个笔记 如果遇到同样问题解决起来又问题的欢迎留言 var emailtext = $("#TextBoxEmail").val();//获得要截取的值 var arr ...
- 几种获取IP 根据IP获取地址的方法 JS,第三方 新浪 网易 腾讯
第一种是利用纯真ip数据库,这个可以在网上找到很多,缺点是更新有点慢. 第二种是利用门户网站的接口 目前已知的有腾讯.新浪.网易.搜狐和Google提供IP地址查询API,但是找得到的只有腾讯.新浪和 ...
随机推荐
- Spring WebSocket初探2 (Spring WebSocket入门教程)<转>
See more: Spring WebSocket reference整个例子属于WiseMenuFrameWork的一部分,可以将整个项目Clone下来,如果朋友们有需求,我可以整理一个独立的de ...
- at91 看门狗
看 门狗的驱动一般来说比较简单,只要做寄存器的设置实现开启.关闭.喂狗功能.本项目中我们使用的是at91sam9g45处理器,带有看门狗定时器.这个 看门狗的驱动却比较复杂,应用层想用它的话,将涉及到 ...
- SQL SERVER 事务和锁
内容皆整理自网络 一.事务 作者:郭无心链接:https://www.zhihu.com/question/31346392/answer/59815366来源:知乎著作权归作者所有.商业转载请联系作 ...
- Git 提交更改
Jerry 已经提交的更改,他想纠正他的最后一次提交,在这种情况下,git 的修改将帮助操作.最后提交修改操作的变化,包括提交信息,它创建新的提交ID. 修改操作之前,他会检查提交日志. [jerry ...
- 【IntelliJ IDEA】idea上提交代码到GitHub,已经提交了 但是GitHub上却没有的解决办法
摘要: 今天提交idea上的代码到GitHub,提交过程已经完成, 在版本控制的Log中可以看到,已经将这一部分都提交更新了 在版本控制的Local Changes中已经看不到提交过的代码了 ...
- PHP和MySQL实现消息队列
最近遇到一个批量发送短信的需求,短信接口是第三方提供的.刚开始想到,获取到手机号之后,循环调用接口发送不就可以了吗? 但很快发现问题:当短信数量很大时,不仅耗时,而且成功率很低. 于是想到,用PHP和 ...
- 微信小程序——自定义导航栏
微信头部导航栏可能通过json配置: 但是有时候我们项目需求可能需要自定义头部导航栏,如下图所示: 现在具体说一下实现步骤及方法: 步骤: 1.在 app.json 里面把 "navigat ...
- SpringMVC深度探险(二) —— SpringMVC概览
对于任何事物的研究,总是由表及里.由浅入深地进行.在本系列的第二篇文章中,我们将通过不同的观察视角,对SpringMVC做一些概要性的分析,帮助大家了解SpringMVC的基本构成要素.SpringM ...
- ASP.NET中使用JavaScript实现图片自动水平滚动效果
参照网上的资料,在ASP.NET中使用JavaScript实现图片自动水平滚动效果. 1.页面前台代码: <%@ Page Language="C#" AutoEventWi ...
- 【4】JVM-GC设计思路分析
Java中将内存的控制交给JVM来实现,方便了JAVA程序猿,当然牺牲了一部分效率,不过总体来看是值得的.那么JVM中是如何设计GC的呢,本文从几个问题入手,然后分析了一下设计思路,如果有理解错误的地 ...