Node.js를 사용하여 혼다와 싸움

혼다와 젠켄은



펩시 재팬이 갑자기 시작한 기획이다. 특정 트윗을 하면 혼다와 짱짱 수 있고, 이기면 펩시 콜라를 받을 것 같다.


/앞으로 3일! 4/19까지 #매일도전 #매일11시 #혼다@pepsi_jpn 교환 쿠폰이 있습니다! 당신은 무엇을 꺼내? ※ 혼잡하면 회신이 느려집니다 #혼다 - Pepsi (펩시) (@pepsi_jpn)

혼다의 승률



혼다 케이유의 켄켄 승률은 대략 98%를 넘고 있으며, 펩시 재팬의 트윗 수 약 807000중 80만건이 펩시의 당락립이라고 가정하면, 1개 600ml의 펩시(100ml당 47kcal)를 혼다 케이유 는 784,000개 이상 마시고 있으며, 그 칼로리는 2억 2천만 kcal에 달한다. 이것은 90분의 축구 약 22만 시합분에 상당. - 스타바 조시 (@yaba_resi) #펩시

뭐야?

혼다와 젠켄하는 법



당초는 펩시 공식 트윗에 있는 버튼을 눌러야 한다고 생각했지만, 아무래도 펩시 재팬에의 리플라이로 해시 태그가 들어 있으면 반응하는 것 같다.

그렇기 때문에 결론으로서는 이하의 트윗을 투고하면 혼다와 젠켄 할 수 있게 된다.
@pepsi_jpn #本田とじゃんけん #本田に〇〇で勝つ

Node.js에서 혼다와 싸우는 방법?



Twitter API도 좋지만 API 키가 없으면 사용할 수 없기 때문에 이번에는 puppeteer를 사용하여 혼다와 싸움을 해 나가고 싶습니다.

puppeteer는 헤드리스 브라우저에서 Chrome을 즐길 수있는 대단한 사람입니다.

구그하면 여러가지 정보가 나오므로, 자세한 정보는 다른 분의 기사에서 봐 주세요.

소스 코드



리포지토리
#재팬콜라
const puppeteer = require('puppeteer');
require('dotenv').config();

async function main() {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();

  try {
    await login(page);
    await tweetPepsi(page)
  } catch (error) {
    console.log(error);
  } finally {
    browser.close();
  }
}

async function login(page) {
  const URL = 'https://twitter.com/login';

  await page.goto(URL, {waitUntil: "domcontentloaded"});

  // ログイン情報入力、ログインボタン押下
  await page.evaluate((id, password) => {
    document.querySelector('.js-username-field').value = id;
    document.querySelector('.js-password-field').value = password;
    document.querySelector('.js-signin').submit();
  }, process.env.ACCOUNT_ID, process.env.ACCOUNT_PASSWORD);

  await page.waitForNavigation();

  console.log('✨  ログイン成功');
}

async function tweetPepsi(page) {
  const tweetText = '@pepsi_jpn #本田とじゃんけん #本田にパーで勝つ';

  // ツイートモーダル開く
  await page.evaluate(({}) => {
    document.querySelector('#global-new-tweet-button').click();
  },{});

  await page.waitFor(500);

  // ツイート文入力
  await page.evaluate((tweetText) => {
    document.querySelector('#Tweetstorm-tweet-box-0 > div.tweet-box-content > div.tweet-content > div.RichEditor.RichEditor--emojiPicker.is-fakeFocus > div.RichEditor-container.u-borderRadiusInherit > div.RichEditor-scrollContainer.u-borderRadiusInherit > div.tweet-box.rich-editor.is-showPlaceholder > div').textContent = tweetText;
  }, tweetText);

  // ツイート
  await page.evaluate(({}) => {
    document.querySelector('.SendTweetsButton').click();
  },{});

  console.log('🐤  ツイート完了');
}

main();


사용 라이브러리


  • dotenv
  • 트위터 ID와 비밀번호의 은닉 용

  • puppeteer
  • 헤드리스 브라우저


  • 처리 해설



    처리로서는
    - 헤드리스 브라우저를 세우기
    - 트위터 로그인 페이지로 전환
    - querySelector로 로그인 정보 입력
    - querySelector에서 클릭 이벤트 발생 로그인
    - 트윗 모달 열기
    - 트윗 문장 넣기
    - 트윗 버튼 누르기

    이것뿐입니다.

    미래의 도전


  • Firebase, Lambda 및 GAS를 사용하여 정기 실행 트리거를 설정하고 싶습니다.
  • 응답을 확인하고 배지가 붙으면 펩시 재팬의 회신 트윗을 확인하고 싶습니다.
  • 응답의 문장에서 승패 결정


  • 또한



    혼다와 젠켄의 기간은 4/19까지 같아요.

    지금부터 정기 실행 트리거를 만들어도 이틀 밖에 시도 할 수없는 것 같아서 유감입니다 (울음)

    라고 할까 이길 생각이 없기 때문에, 돈키로 코카·콜라를 사고 싶습니다.

    고마워요

    좋은 웹페이지 즐겨찾기