Javascript snippets
Handy JS snippets that can be cut and pasted into a 'Write javascript' Step to perform a function like fetching yesterday's date.
# Go back in a tab with javascript
Go back a tab.
window.history.back()
Tab back X amount of times.
window.history.go(-2)
# Click on something with javascript
Find a button by text, click and pause 5 seconds. Repeat until button is no longer present on the page.
const delay = ms => new Promise(res => setTimeout(res, ms))
let element = document.evaluate("//button[contains(., 'Load more')]", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE).singleNodeValue
while (element) {
element.click()
await delay(5000)
element = document.evaluate("//button[contains(., 'Load more')]", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE).singleNodeValue
}
# Interact with a select list with javascript
Use keyboard commands (arrow down) for difficult select-lists
// First, either 1) Click to open the difficult select-list,
// OR 2) Use the tab-key to select the element
let marital = 'Single'
async function arrowDownTimes(times) {
for(var i = 0; i < times; i++){
await page.keyboard.press('ArrowDown');
await page.waitForTimeout(250);
}
}
switch(marital) {
case 'Married':
break;
case 'Single':
arrowDownTimes(1);
break;
case 'Divorced':
arrowDownTimes(2);
break;
}
# Scrape with javascript
Get header and row values from an HTML table
const headers = Array.prototype.map.call(document.querySelectorAll('#org-insight__a11y-table tr'), function(tr){
return Array.prototype.map.call(tr.querySelectorAll('th'), function(th){
return th.textContent.trim()
})
})
const table = Array.prototype.map.call(document.querySelectorAll('#org-insight__a11y-table tr'), function(tr){
return Array.prototype.map.call(tr.querySelectorAll('td'), function(td){
return td.textContent.trim()
})
})
const data = headers.concat(table)
return data
Scrape element attribute
let results = []
let els = document.querySelectorAll("div:nth-child(1) > input")
for (const el of els) {
result.push([el.getAttribute("name")])
}
return results
Scrape body and return result
return [[document.querySelector("body").innerHTML]]
# Get the date and time with javascript
Fetch yesterday's date.
const yesterday = new Date()
yesterday.setDate(yesterday.getDate() - 1)
return [[yesterday.toLocaleDateString('en-US')]]
Get the date X days ahead (Edit '14' to change the number of days).
const targetDate = new Date()
targetDate.setDate(targetDate.getDate() + 14)
return [[targetDate.toLocaleDateString('en-US')]]
Append timestamp to scraped data
let data = [all-interaction-data] // Token from previous scrape step
let dt = new Date().toLocaleString("en-GB", { timeZone: 'Europe/London' })
for (var i = 0; i < data.length; i++) {
data[i].push([dt])
}
return data