値段の比較はお手の物
#SCKOSEN2020
スクリプトだけ貼っておく、デバッグ出力も残してあるので動かすとよくわかるかも
puppeteerを利用
過去のnitacltでも紹介→http://o0i.es/slides/nitaclt-9th.pdf
Rust脳でreturn忘れたり型付けたりして無限にバグった
code:solve.js
const puppeteer = require('puppeteer')
async function answer(page) {
await page.waitForSelector("divname='content'")
page.on('console', consoleObj => console.log(consoleObj.text()));
const evalClosure = () => {
const els = document.querySelectorAll("divname='content'")
let cond = document.getElementById("message").innerHTML.trim()
console.log(cond)
let rank, findCheap
if (cond.includes('最高"値の商品名を入力してね')) {
rank = 0
findCheap = false
} else if (cond.includes('最安"値の商品名を入力してね')) {
rank = 0
findCheap = true
} else {
const regex = /^(\d{1,2}?)番目に(.)い商品名を入力してね/
const matches = regex.exec(cond)
console.log("******")
console.log(matches0)
console.log(matches1)
console.log(matches2)
console.log("******")
rank = parseInt(matches1) - 1
findCheap = matches2 == "安"
}
console.log(rank)
console.log(findCheap)
let products = []
for (let el of els) {
let product = {}
product.price = parseInt(el.querySelector("divname='price'").innerHTML.substr(3), 10)
product.item = el.querySelector("divname='item'").textContent.substr(4)
products.push(product)
}
products = products.sort((a,b) => {
if (findCheap) {
return a.price - b.price
} else {
return b.price - a.price
}
})
for (let prod of products) {
console.log(${prod.price}: ${prod.item})
}
let res = productsrank
console.log("----Result------")
console.log(${res.price}: ${res.item})
console.log("----------")
let inputEl = document.getElementById("name")
inputEl.value = res.item
let formEl = document.getElementsByClassName("form-inline")0
formEl.submit()
}
while(1) {
await Promise.all([
page.waitForNavigation(),
page.evaluate(evalClosure)
])
}
}
(async () => {
const browser = await puppeteer.launch({
args: '--disable-setuid-sandbox', '--no-sandbox'
})
let page = await browser.newPage()
await page.goto('http://52.175.155.247:5000/')
await answer(page)
})()