Download Ctrip Flight
// ==UserScript==
// @icon http://pic.c-ctrip.com/common/c_logo2013.png
// @name Ctrip Flight
// @author 初一他大爷
// @description Download Ctrip Flight
// @include http*://flights.ctrip.com/schedule/*-*map.html
// @require http://cdn.bootcss.com/jquery/1.8.3/jquery.min.js
// @version 0.0.1
// @grant none
// @version 0.0.1.20190821101657
// @namespace https://greasyfork.org/users/331377
// ==/UserScript==
var finalData;
//Write data
function writeData(toSave){
//Create <a>
var eleLink = document.createElement('a');
eleLink.download = "flight.csv";
eleLink.style.display = 'none';
var strData = "\ufeff" + "航线名,起飞,到达,起飞机场,到达机场,航空公司,航班号,\r" + toSave;
var objFile = new Blob([strData],{type: 'text/csv,charset=UTF-8'});
eleLink.href = (window.URL || window.webkitURL).createObjectURL(objFile);
//Append <a>
document.body.appendChild(eleLink);
//Click <a>
eleLink.click();
//Remove <a>
document.body.removeChild(eleLink);
}
////Append button to main page
function appendButton(savecontent) {
//Prepare button
var a = document.createElement("a");
var li = document.createElement("li");
var ul = document.getElementsByClassName("nav-bar-set")[0];
a.textContent = "下载";
a.setAttribute('id', "downloadFlight");
a.setAttribute('href', "javascript:void(0)");
li.setAttribute('class', "set-list");
li.appendChild(a);
ul.appendChild(li);
}
//Download flights
function downloadFlight(){
var newWindow;
var nextPage;
var newURL;
//Collect 1st page data
finalData = GetData(this.document);
//Collect data of rest page(s)
nextPage = document.getElementsByClassName("schedule_down")[0];
if(nextPage){
//original nextPage.href is http, main page is https.
newURL = nextPage.href.replace(/http/, "https");
//New window
newWindow = window.open(newURL, "FilghtWindow", "directories=no,resizable=no, width=400, height=400");
newWindow.focus();
var winLoaded = function(){
//Collect rest
finalData = finalData + GetData(newWindow.document);
//Next
nextPage = newWindow.document.getElementsByClassName("schedule_down")[0];
if (nextPage){
newURL = nextPage.href.replace(/http/, "https");
newWindow.location.replace(newURL);
}else{
//Finish
console.log(finalData);
writeData(finalData);
newWindow.close();
}
}
var winUnloaded = function(){
setTimeout(function(){
newWindow.onload= winLoaded;
newWindow.onunload = winUnloaded;
},0);
}
//add handle
newWindow.onload= winLoaded;
newWindow.onunload = winUnloaded;
}
}
//Get data from page
function GetData(docData){
//Get table
var tblRows = $(".fltlist_table > tbody > tr",docData);
var lngRowLength;
if (!tblRows && typeof(tblRows)!="undefined" && tblRows!=0){
alert("Cannot find table: fltlist_table");
return;
}
lngRowLength = tblRows.length;
//console.log(lngRowLength);
//Traverse
var aryData = [lngRowLength];
var strTmp = "";
var strData = "";
for(var i=0; i<lngRowLength; i++){
aryData[i] = new Array(7)
aryData[i][0] = tblRows[i].cells[0].innerText;
strTmp = tblRows[i].cells[1].innerText;
aryData[i][1] = strTmp.slice(0,strTmp.indexOf("\n"));
aryData[i][2] = strTmp.slice(strTmp.indexOf("\n")+1);
strTmp = tblRows[i].cells[2].innerText;
aryData[i][3] = strTmp.slice(0,strTmp.indexOf("\n"));
aryData[i][4] = strTmp.slice(strTmp.indexOf("\n")+1);
strTmp = tblRows[i].cells[6].innerText;
aryData[i][5] = strTmp.slice(0,strTmp.indexOf("\n"));
aryData[i][6] = strTmp.slice(strTmp.indexOf("\n")+1);
//merge
for(var j=0; j<7; j++){
strData = strData + aryData[i][j] + ",";
}
strData = strData + "\r"
}
return strData;
}
//Wait till main page is loaded
window.addEventListener('DOMContentLoaded', (event) => {
//Append button and its click function
appendButton("");
document.getElementById("downloadFlight").onclick = function () {
downloadFlight();
};
});
//Impoartnt:select a element from aother window
//$("a.schedule_down",newWindow.document)[0].click();
//Impoartnt:select a element from aother window