私はスクレーパーを作る必要があります:
ヘッドレスブラウザーを開き、 rl に移動し、ログイン(Steam oauthがあります)、入力を入力し、2つのボタンをクリックします
問題は、ヘッドレスブラウザのすべての新しいインスタンスがログインセッションをクリアし、その後何度もログインする必要があることです...インスタンスを通してそれを保存する方法は?たとえば、ヘッドレスクロームで操り人形師を使用する
または、すでにログインしているchrome headlessインスタンスを開くにはどうすればよいですか?メインでログインしている場合chrome window
Puppeterでは、page.cookies()
を介してセッションCookieにアクセスできます。
したがって、ログインすると、すべてのCookieを取得し、 jsonfile を使用してjsonファイルに保存できます。
_// Save Session Cookies
const cookiesObject = await page.cookies()
// Write cookies to temp file to be used in other profile pages
jsonfile.writeFile(cookiesFilePath, cookiesObject, { spaces: 2 },
function(err) {
if (err) {
console.log('The file could not be written.', err)
}
console.log('Session has been successfully saved')
})
_
次に、page.goto()
を使用する直前の次の反復で、page.setCookie()
を呼び出して、ファイルからCookieを1つずつロードできます。
_const previousSession = fileExistSync(cookiesFilePath)
if (previousSession) {
// If file exist load the cookies
const cookiesArr = require(`.${cookiesFilePath}`)
if (cookiesArr.length !== 0) {
for (let cookie of cookiesArr) {
await page.setCookie(cookie)
}
console.log('Session has been loaded in the browser')
return true
}
}
_
ドキュメントをチェックアウトします。
Puppeteerの起動時にuserDataDir
オプションを使用してユーザーデータを保存するオプションがあります。これは、Chromeの起動に関連するセッションおよびその他のものを保存します。
puppeteer.launch({
userDataDir: "./user_data"
});
詳細は説明しませんが、次のドキュメントへのリンクを参照してください。 https://pptr.dev/#?product=Puppeteer&version=v1.6.1&show=api-puppeteerlaunchoptions
実際に機能し、jsonfile
に依存しない上記のソリューションのバージョンについて(より標準的なfs
を使用する代わりに)、これをチェックしてください。
セットアップ:
const fs = require('fs');
const cookiesPath = "cookies.txt";
Cookieを読み取る(このコードを最初に置く):
// If the cookies file exists, read the cookies.
const previousSession = fs.existsSync(cookiesPath)
if (previousSession) {
const content = fs.readFileSync(cookiesPath);
const cookiesArr = JSON.parse(content);
if (cookiesArr.length !== 0) {
for (let cookie of cookiesArr) {
await page.setCookie(cookie)
}
console.log('Session has been loaded in the browser')
}
}
クッキーを書く:
// Write Cookies
const cookiesObject = await page.cookies()
fs.writeFileSync(cookiesPath, JSON.stringify(cookiesObject));
console.log('Session has been saved to ' + cookiesPath);
クッキーを書くために
async function writingCookies() {
const cookieArray = require(C.cookieFile); //C.cookieFile can be replaced by ('./filename.json')
await page.setCookie(...cookieArray);
await page.cookies(C.feedUrl); //C.url can be ('https://example.com')
}
Cookieを読み取るには、プロジェクトにjsonfileをインストールする必要があります。npminstall jsonfile
async function getCookies() {
const cookiesObject = await page.cookies();
jsonfile.writeFile('linkedinCookies.json', cookiesObject, { spaces: 2 },
function (err) {
if (err) {
console.log('The Cookie file could not be written.', err);
}
console.log("Cookie file has been successfully saved in current working Directory : '" + process.cwd() + "'");
})
}
await
を使用してこれらの2つの関数を呼び出すと、機能します。