• SIS Lab
  • >
  • Blog
  • >
  • PuppeteerでAmazonアフィリエイトのレポートを取得する

PuppeteerでAmazonアフィリエイトのレポートを取得する

更新日:2022.07.02 作成日:2017.08.22

GoogleChrome/puppeteer: Headless Chrome Node API というHeadless Chromeを操作するJavaScriptライブラリが出たので使ってみました。

何度も実行してロボット判定されてしまったので、実際にはHeadlessで動作確認していないが(おそらく)こんな感じで取得できるはず。

2017/09/10追記

デバッグモード以外では毎回ロボット判定されてしまうため、Cookieからログインする方法に変えました。 初回ログイン時は、デバッグモードで動かし、Cookieを保存し、2回目以降はCookieからログインする。

インストール

yarn add puppeteer

コード

const puppeteer = require('puppeteer');
const fs = require('fs');

const cookies_path = './cookies_amazon.json';
const {AMAZON_ID, AMAZON_PW} = require('./config');

/**
 * debugモードでログイン
 */
async function login(page) {
  await page.goto('https://affiliate.amazon.co.jp/');
  await page.click('#a-autoid-0-announce');
  await page.waitFor(2000);

  await page.focus('#ap_email');
  await page.type(AMAZON_ID);
  await page.waitFor(2000);
  await page.focus('#ap_password');
  await page.type(AMAZON_PW);
  await page.waitFor(2000);

  await page.click('#signInSubmit');
  await page.waitFor(5000);
  await page.screenshot({path: 'images/amazon_logined.png'});
}

/**
 * Cookieを利用してログイン
 */
async function loginWithCookie(page) {
  const cookies = JSON.parse(fs.readFileSync(cookies_path, 'utf-8'));
  for (let cookie of cookies) {
    await page.setCookie(cookie);
  }
}

(async () => {
  const browser = await puppeteer.launch({
    headless: true,
  });
  const page = await browser.newPage();
  await page.setViewport({width: 1280, height: 700});

  // await login(page);
  await loginWithCookie(page);
  await page.goto('https://affiliate.amazon.co.jp/home');
  await page.screenshot({path: 'images/amazon_login.png'});

  await page.goto('https://affiliate.amazon.co.jp/home/reports?ac-ms-src=summaryforthismonth');
  await page.waitForSelector('#ac-report-commission-commision-total');
  const commission = await page.evaluate(() => {
    return document.querySelector('#ac-report-commission-commision-total').textContent;
  });
  console.log(commission);

  await page.screenshot({path: 'images/amazon_after.png'});
  const afterCookies = await page.cookies();
  fs.writeFileSync('cookies_amazon.json', JSON.stringify(afterCookies));

  browser.close();
})();

Cookie操作

Cookie保存

const cookies = await page.cookies();
fs.writeFileSync('cookies_amazon.json', JSON.stringify(cookies));

Cookie取得・設定

const cookies_path = './cookies_amazon.json';
const cookies = JSON.parse(fs.readFileSync(cookies_path, 'utf-8'));
for (let cookie of cookies) {
  await page.setCookie(cookie);
}

こんな感じで保存したCookieを設定してあげることで、2回目以降Cookieを使ってログインできました。

初めてのJavaScript 第3版 ―ES2015以降の最新ウェブ開発
初めてのJavaScript 第3版 ―ES2015以降の最新ウェブ開発
出版社:オライリージャパン
著者:Ethan Brown武舎 広幸武舎 るみ
発売日: 2017/01/20

参考

Related contents