1. 概述
京粉(https://union.jd.com/)是京东联盟下的网站,通过分享其中的商品链接可以赚取佣金,类似淘客联盟。
采集京粉的商品,既可以练习 puppeteer的使用,平时想在京东购物时,也能用得上(采集看看有类似商品的价格和评价)。
2. 主要流程
采集的流程很简单:
2.1 登录
登录本来是很简单的步骤,只是京粉的登录有点特殊,它的登录框是在 iframe 中,所以,加载完网页后可能登录框并没有出现。
需要加载完 iframe 之后才能录入用户名/密码。
登录模块的代码如下:
const username = "YOUR NAME";const passwd = "YOUR PASSWORD";// 登录const login = async (page) => { await page.goto("https://union.jd.com/index"); // 等待加载 login 的 iframe await page.waitForSelector("#indexIframe"); const frame = (await page.frames())[1]; await frame.waitForSelector("#loginname"); // 输入用户名和密码 登录 await frame.type("#loginname", username, { delay: 100 }); await frame.type("#nloginpwd", passwd, { delay: 100 }); await frame.click("#paipaiLoginSubmit");};export default login;
2.2 进入“商品检索”菜单
登录成功后,进入首页,点击左侧的菜单进入“商品检索”页面。
注意这里直接使用 page 的 click 方法是无效的,需要使用如下方式:
// 进入商品界面const productPage = async (page) => { await page.waitForSelector(".menu-wrapper"); // 直接选择无法点击,只能用 page.evaluate 方法来点击 // 【我要推广】 菜单 await page.evaluate( (selector) => document.querySelectorAll(selector)[0].click(), ".el-submenu__title>span" ); // 【商品推广】 菜单 await page.evaluate( (selector) => document.querySelectorAll(selector)[1].click(), "li.el-menu-item>span" );};
2.3 录入检索条件并开始检索
商品推广页面支持的检索条件很多,这里只输入佣金和价格的范围来检索:
// 检索商品(佣金比例范围,价格范围)const searchProduct = async (page, feeMin, feeMax, priceMin, priceMax) => { await page.waitForSelector(".imgbox"); await page.waitForSelector("input.el-input__inner"); const inputs = await page.$$("input.el-input__inner"); // IMPORTANT 使用click才能输入完整,使用 focus,无法输入完整 await inputs[1].click(); // await inputs[1].focus(); await inputs[1].type(feeMin, { delay: 200 }); await inputs[2].click(); await inputs[..............