介紹
這一篇來介紹 Puppeteer 拿到網頁 FB Token的辦法,這樣可以用網頁Token的權限來做事情
這邊要自已的fb帳號密碼 key 在自己輸入自己的格式如下
module.exports = {
account: '',
password: ''
}
這時候可以使用 userDataDir ,使用這個時候記得要設定用一個資料夾,不然會產生很多檔案, userDataDir 很好用他可以紀錄目前 cookies 跟操作的一些記錄,所以當FB有登入一次的時候如果有設定這個選項,就不用反覆在登入了速度會加快很多。
const browser = await puppeteer.launch({
headless: false
userDataDir: "./userData"
});
page.click 是點擊這個dom一下, 接下來入資料 page.type 最後點擊登入,waitForNavigation這個是等待下一頁的導覽列出來,通常這樣會比較保險不會網頁都還沒Load 完就跑去做其他的事情
awiat page.click('#email');
await page.type('#email', keyData.account);
await page.click('#pass');
await page.type('#pass', keyData.password);
await page.click('#loginbutton');
await page.waitForNavigation();
接著找到要點選的link 點擊一下 document.querySelector(path).click();
let content = await page.evaluate(() => {
var path =
'table.uiGrid:nth-child(2) > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(1) > div:nth-child(1) > div:nth-child(1) > span:nth-child(1) > a:nth-child(1)';
document.querySelector(path).click();
});
最後拿到developr的開發權限 token
let token = await page.evaluate(() => {
var path = (path =
'body > div._li._4xit > div._53vp > div > div > div > div._3a8w._4-u3 > div > div._5wpg._5wph > label > input');
return document.querySelector(path).value;
});
寫入到檔案,提供其他需要用到token的程式使用
fs.writeFile('../../credentials/authKey.js', `module.exports = token= '${token}'`, options, (err) => {
console.log(err);
});
以下是全部的程式碼
const puppeteer = require('puppeteer');
const keyData = require('key');
const fs = require('fs');
console.log(keyData.account);
async function go() {
const browser = await puppeteer.launch({
headless: false
userDataDir: "./userData"
});
const page = await browser.newPage();
await page.goto(
'https://www.facebook.com/login/?next=https%3A%2F%2Fdevelopers.facebook.com%2Ftools-and-support%2F'
);
await page.click('#email');
await page.type('#email', keyData.account);
await page.click('#pass');
await page.type('#pass', keyData.password);
await page.click('#loginbutton');
await page.waitForNavigation();
let token = await page.evaluate(() => {
var path = (path =
'body > div._li._4xit > div._53vp > div > div > div > div._3a8w._4-u3 > div > div._5wpg._5wph > label > input');
return document.querySelector(path).value;
});
var options = { flag: 'w' };
fs.writeFile('../../credentials/authKey.js', `module.exports = token= '${token}'`, options, (err) => {
console.log(err);
});
console.log(token);
}
go();
總結
Puppeteer 在爬蟲這塊寫的方法都很簡單語法都縮短很多,也提供不同情境的加速 ,爬完Fb Token比透過Api拿到的權限比較多 就看個人要怎樣運用了