56 lines
1.5 KiB
JavaScript
56 lines
1.5 KiB
JavaScript
import { extractModelId, extractNumber } from "../system/ultils.js";
|
|
import { ScrapModel } from "./scrap-model.js";
|
|
|
|
export class LangtonsScrapModel extends ScrapModel {
|
|
action = async () => {
|
|
const urlsData = this.extractUrls();
|
|
|
|
for (let item of urlsData) {
|
|
await this.page.goto(item.url);
|
|
|
|
const data = await this.getItemsInHtml(item);
|
|
|
|
const results = this.filterItemByKeyword(item.keyword, data);
|
|
|
|
this.results[item.keyword] = results;
|
|
|
|
console.log({ results: this.results });
|
|
}
|
|
};
|
|
|
|
getItemsInHtml = async (data) => {
|
|
const elements = await this.page.$$(".row.product-grid.grid-view");
|
|
const results = [];
|
|
|
|
for (const el of elements) {
|
|
const url = await el
|
|
.$eval("a.js-pdp-link.pdp-link-anchor", (el) => el.getAttribute("href"))
|
|
.catch(() => null);
|
|
|
|
const image_url = await el
|
|
.$eval("img.tile-image.loaded", (img) => img.getAttribute("src"))
|
|
.catch(() => null);
|
|
|
|
const name = await el
|
|
.$eval(".link.js-pdp-link", (el) => el.textContent.trim())
|
|
.catch(() => null);
|
|
|
|
const current_price = await el
|
|
.$eval("div.max-bid-price.price", (el) => el.textContent.trim())
|
|
.catch(() => null);
|
|
|
|
results.push({
|
|
url: `${this.web_bid.origin_url}${url}`,
|
|
image_url,
|
|
name,
|
|
keyword: data.keyword,
|
|
model: extractModelId(`${this.web_bid.origin_url}${url}`),
|
|
current_price: extractNumber(current_price),
|
|
scrap_config_id: this.scrap_config_id,
|
|
});
|
|
}
|
|
|
|
return results;
|
|
};
|
|
}
|