PuppeteerとPhantomJSは似ています。私が抱えている問題は両方で発生しており、コードも同様です。
ウェブサイトからいくつかの情報をキャッチしたいのですが、それらの情報を表示するには認証が必要です。ホームページにアクセスすることさえできません。これは、SSのような「疑わしいアクティビティ」のように検出されるためです。 https://i.imgur.com/p69OIjO.png
Cookieという名前のヘッダーを使用してPostmanでテストしたときに問題が発生しないことを発見しました。しばらくすると期限が切れます。だから、Puppeteer/PhantomJSはどちらもCookieをキャッチしていないと思います。なぜなら、このサイトはブラウザーのヘッドレスアクセスを拒否しているからです。
これをバイパスするにはどうすればよいですか?
// Simple Javascript example
var page = require('webpage').create();
var url = 'https://www.expertflyer.com';
page.open(url, function (status) {
if( status === "success") {
page.render("home.png");
phantom.exit();
}
});
一般的に役立つこと:
アクセスしようとしているWebサイトは、Webスクレイピングを防ぐために Distil Networks を使用しています。
過去の成功 Distil Networksをバイパスして$cdc_
変数はChromiumの call_function.js にあります(Puppeteerで使用されます)。
例:
function getPageCache(opt_doc, opt_w3c) {
var doc = opt_doc || document;
var w3c = opt_w3c || false;
// var key = '$cdc_asdjflasutopfhvcZLmcfl_'; <-- This is the line that is changed.
var key = '$something_different_';
if (w3c) {
if (!(key in doc))
doc[key] = new CacheWithUUID();
return doc[key];
} else {
if (!(key in doc))
doc[key] = new Cache();
return doc[key];
}
}
注:このコメント によると、この変更を行う前にブラックリストに登録されている場合、別の課題に直面します。そのため、「偽のキャンバスフィンガープリンティングを実装し、フラッシュを無効にし、IPを変更し、リクエストヘッダーの順序を変更します(言語の交換とヘッダーの受け入れ)」。
ウェブサイトの観点から考えると、あなたは確かに疑わしい仕事をしています。したがって、このようなものをバイパスしたいときはいつでも、彼らがどう考えているかを考えてください。
PuppeteerやPhantomJSなどは実際のブラウザを使用し、そこで使用されるCookieは郵便配達員などを介して使用する場合よりも優れています。クッキーを適切に使用する必要があります。
page.setCookie(...cookies)
を使用してCookieを設定できます。 Cookieはシリアル化されるため、Cookieがオブジェクトの配列である場合は、これを簡単に行うことができます。
const cookies = [{name: 'test', value: 'foo'}, {name: 'test2', value: 'foo'}]; // just as example, use real cookies here;
await page.setCookie(...cookies);
ヘッドレスモードをオフにして、Webサイトの動作を確認します。
await puppeteer.launch({headless: false})
一部のWebサイトはIPアドレスに基づいて監視します。複数のヒットが同じIPからのものである場合、リクエストをブロックします。その場合は、回転プロキシを使用するのが最善です。