Skip to content

Instantly share code, notes, and snippets.

@Dan6erbond
Last active September 25, 2020 07:06
Show Gist options
  • Save Dan6erbond/a4a7a33956bbb44a58fa5c1722d2b930 to your computer and use it in GitHub Desktop.
Save Dan6erbond/a4a7a33956bbb44a58fa5c1722d2b930 to your computer and use it in GitHub Desktop.
Tampermonkey user scripts to convert car listings to Sheets columns.
// ==UserScript==
// @name Autolina
// @namespace http://tampermonkey.net/
// @version 0.1
// @description Convert Autolina car listings to Sheets columns.
// @author Dan6erbond
// @match https://www.autolina.ch*auto/*
// @grant none
// ==/UserScript==
window.addEventListener(
"load",
function () {
function stripHtml(html) {
var tmp = document.createElement("DIV");
tmp.innerHTML = html;
return tmp.textContent || tmp.innerText || "";
}
function getNumbers(txt) {
var numb = txt.match(/\d/g);
return numb ? numb.join("") : "";
}
function getElementByXpath(path) {
return document.evaluate(
path,
document,
null,
XPathResult.FIRST_ORDERED_NODE_TYPE,
null
).singleNodeValue;
}
function copyToClipboard(text) {
var input = document.createElement("textarea");
input.innerHTML = text;
document.body.appendChild(input);
input.select();
var result = document.execCommand("copy");
document.body.removeChild(input);
return result;
}
// model
var out = stripHtml(
getElementByXpath(`//*[@id="breadcrumb"]/li[2]/a/span`).innerHTML
).trim();
// make
out += "\t";
out += stripHtml(
getElementByXpath(`//*[@id="breadcrumb"]/li[4]/a/span`).innerHTML
).trim();
// price
var elm = document.querySelector(
"div.al-car-details-left > div > div.al-car-details-price.al-car-details-price-desktop"
);
out += "\t";
out += getNumbers(stripHtml(elm.innerHTML).trim());
// km
var elm = document.querySelector(
"div.al-car-details-left > div.al-car-details-top-details > div:nth-child(2) > p:nth-child(1) > span"
);
out += "\t";
out += getNumbers(stripHtml(elm.innerHTML).trim());
// hp
var elm = document.querySelector(
"div.al-car-details-left > div.al-car-details-top-details > div:nth-child(4) > p:nth-child(1) > span"
);
out += "\t";
out += getNumbers(stripHtml(elm.innerHTML).trim());
// fuel type
var elm = document.querySelector(
"div.al-car-details-left > div.al-car-details-top-details > div:nth-child(2) > p:nth-child(2) > span"
);
out += "\t";
var fuelType = stripHtml(elm.innerHTML).trim();
if (!document.location.href.includes("/en/")) {
fuelType = fuelType == "Benzin" ? "Petrol" : "Diesel";
}
out += fuelType;
// empty insurance field
out += "\t";
out += "";
// fuel usage
out += "\t";
var elm = document.querySelector(
"div.al-car-details-left > div.al-car-details-info-energy > ul:nth-child(2) > li:nth-child(2)"
);
var usage = stripHtml(elm.textContent)
.trim()
.match(/(\d+(\.\d+)?)/);
out += usage ? usage[0] : "";
// dealer
out += "\t";
var elm = document.querySelector(
"div.al-car-details-right > aside > div.al-car-details-contact-form-container > div > div.panel-body > div:nth-child(1) > b"
);
out += elm ? stripHtml(elm.innerHTML).trim() : "";
// empty interior type
out += "\t";
out += "";
out += "\t";
out += window.location.href;
// location
out += "\t";
var elm = document.querySelector(
"div.al-car-details-right > aside > div.al-car-details-contact-form-container > div > div.panel-body > div:nth-child(1) > p"
);
var match = elm && elm.innerHTML.match(/(\d{4} ([a-zA-Zöäü]+))/);
out += match
? stripHtml(match[0]).trim()
: "";
copyToClipboard(out);
console.log(out);
},
false
);
// ==UserScript==
// @name AutoScout24
// @namespace http://tampermonkey.net/
// @version 0.1
// @description Convert AutoScout24 car listings to Sheets columns.
// @author Dan6erbond
// @match https://www.autoscout24.ch/de/d/*
// @grant none
// ==/UserScript==
window.addEventListener(
"load",
function () {
function stripHtml(html) {
var tmp = document.createElement("DIV");
tmp.innerHTML = html;
return tmp.textContent || tmp.innerText || "";
}
function getNumbers(txt) {
var numb = txt.match(/\d/g);
return numb ? numb.join("") : "";
}
function getElementByXpath(path) {
return document.evaluate(
path,
document,
null,
XPathResult.FIRST_ORDERED_NODE_TYPE,
null
).singleNodeValue;
}
function copyToClipboard(text) {
var input = document.createElement("textarea");
input.innerHTML = text;
document.body.appendChild(input);
input.select();
var result = document.execCommand("copy");
document.body.removeChild(input);
return result;
}
// make
var [make, ...model] = stripHtml(
getElementByXpath(`//*[@id="analytics-intersect-observer-3"]/div/h1`)
.innerHTML
)
.trim()
.split(" ");
var out = make;
// model
out += "\t";
out += model.join(" ");
// price
var elm = getElementByXpath(
`//*[@id="app"]/div[1]/main/section/div/div/div/div/div[6]/div[2]/div[1]/span`
);
out += "\t";
out += getNumbers(stripHtml(elm.innerHTML).trim());
// km
var elm = getElementByXpath(
`//*[@id="app"]/div[1]/main/section/div/div/div/div/section[2]/div[1]/div[1]/div/div[2]/div/span`
);
out += "\t";
out += getNumbers(stripHtml(elm.innerHTML).trim());
// hp
var elm = getElementByXpath(
`//*[@id="app"]/div[1]/main/section/div/div/div/div/section[2]/div[1]/div[1]/div/div[3]/div/span`
);
out += "\t";
out += getNumbers(stripHtml(elm.innerHTML).trim());
// fuel type
var elm = getElementByXpath(
`//*[@id="app"]/div[1]/main/section/div/div/div/div/section[2]/div[1]/div[1]/div/div[4]/div/span`
);
out += "\t";
out += stripHtml(elm.innerHTML).trim() == "Benzin" ? "Petrol" : "Diesel";
// empty insurance field
out += "\t";
out += "";
// fuel usage
out += "\t";
var elm = getElementByXpath(
`//*[@id="app"]/div[1]/main/section/div/div/div/div/section[6]/div/div/div[1]/span/span[1]/b`
);
var usage = stripHtml(elm.textContent)
.trim()
.match(/(\d+(\.\d+)?)/);
out += usage ? usage[0] : "";
// dealer
out += "\t";
var elm = getElementByXpath(
`//*[@id="app"]/div[1]/main/section/div/div/div/div/section[7]/div[1]/div/div[1]/span[1]`
);
out += elm ? stripHtml(elm.innerHTML).trim() : "";
// empty interior type
out += "\t";
out += "";
out += "\t";
out += window.location.href;
// location
out += "\t";
var elm = getElementByXpath(
`//*[@id="app"]/div[1]/main/section/div/div/div/div/section[7]/div[1]/div/div[2]/div[2]`
);
out += elm ? stripHtml(elm.innerHTML).trim() : "";
copyToClipboard(out);
console.log(out);
},
false
);
// ==UserScript==
// @name Car For You
// @namespace http://tampermonkey.net/
// @version 0.1
// @description Convert CarForYou car listings to Sheets columns.
// @author Dan6erbond
// @match https://www.carforyou.ch/de/auto/*
// @grant none
// ==/UserScript==
window.addEventListener(
"load",
function () {
function stripHtml(html) {
var tmp = document.createElement("DIV");
tmp.innerHTML = html;
return tmp.textContent || tmp.innerText || "";
}
function getNumbers(txt) {
var numb = txt.match(/\d/g);
return numb ? numb.join("") : "";
}
function getElementByXpath(path) {
return document.evaluate(
path,
document,
null,
XPathResult.FIRST_ORDERED_NODE_TYPE,
null
).singleNodeValue;
}
function copyToClipboard(text) {
var input = document.createElement("textarea");
input.innerHTML = text;
document.body.appendChild(input);
input.select();
var result = document.execCommand("copy");
document.body.removeChild(input);
return result;
}
// model
var out = stripHtml(document.getElementsByTagName("h1")[0].innerHTML);
// make
out += "\t";
out += stripHtml(document.getElementsByTagName("h2")[0].innerHTML);
// price
var txt = document.querySelector(
"#__next > main > article > div.flex.flex-wrap.max-w-searchContainer.mx-auto.md\\:px-20.lg\\:pb-50 > div.w-12\\/12.lg\\:w-5\\/12.xl\\:w-4\\/12.px-15.md\\:px-20.lg\\:pl-40 > div.flex.flex-wrap.pb-16 > div.w-12\\/12.text-grey-dark.font-bold.text-xl.md\\:text-2xl.mb-4"
).innerHTML;
out += "\t";
out += getNumbers(stripHtml(txt));
// km
var txt = getElementByXpath(
`//*[@id="__next"]/main/article/div[3]/div[1]/div/div/div/div/div/div[1]/div[1]/div/p[2]`
).innerHTML;
out += "\t";
out += getNumbers(stripHtml(txt));
// hp
var txt = getElementByXpath(
`//*[@id="__next"]/main/article/div[3]/div[1]/div/div/div/div/div/div[3]/div[1]/div/p[1]`
).innerHTML;
out += "\t";
out += getNumbers(stripHtml(txt));
// fuel type
var txt = getElementByXpath(
`//*[@id="__next"]/main/article/div[2]/div[1]/div[3]/section/div[6]`
).innerHTML;
out += "\t";
out += stripHtml(txt) == "Benzin" ? "Petrol" : "Diesel";
// empty insurance field
out += "\t";
out += "";
// fuel usage
out += "\t";
var txt = getElementByXpath(
`//*[@id="__next"]/main/article/div[3]/div[1]/div/div/div/div/div/div[4]/div[1]/div/p[1]/text()[1]`
).textContent;
var usage = stripHtml(txt).match(/(\d+(\.\d+)?)/);
out += usage ? usage[0] : "";
// dealer
out += "\t";
var elm = document.querySelector(
"#__next > main > article > div.flex.flex-wrap.max-w-searchContainer.mx-auto.md\\:px-20.lg\\:pb-50 > div.w-12\\/12.lg\\:w-5\\/12.xl\\:w-4\\/12.px-15.md\\:px-20.lg\\:pl-40 > div.w-12\\/12.flex.flex-wrap > div > div.font-bold.mb-4.text-grey-dark.w-12\\/12.leading-sm"
);
out += elm ? stripHtml(elm.innerHTML) : "";
// empty interior type
out += "\t";
out += "";
out += "\t";
out += window.location.href;
// location
out += "\t";
var elm = document.querySelector(
"#__next > main > article > div.flex.flex-wrap.max-w-searchContainer.mx-auto.md\\:px-20.lg\\:pb-50 > div.w-12\\/12.lg\\:w-5\\/12.xl\\:w-4\\/12.px-15.md\\:px-20.lg\\:pl-40 > div.w-12\\/12.flex.flex-wrap > div > div.text-grey-dark-opaque.text-sm.mb-16.w-12\\/12.leading-xs"
);
out += elm ? stripHtml(elm.innerHTML.match(/(\d{4} (.+))/)[0]) : "";
copyToClipboard(out);
console.log(out);
},
false
);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment