私は、Debian 9 OS(Google Compute Engine)を実行しているディスプレイレス(Xvfb)Linuxサーバーでウェブサイトをスクラップするためにセレンを使用しています。ただし、ウェブサイトは次の本文を返します。
<html><head>
<title>name of website</title>
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="/static/css_interface.css" type="text/css" media="screen">
<link url="theme" rel="stylesheet" href="/static/css.theme?%23393939%40%233c6ae0%40rgba%2840%2C40%2C40%2C0.9%29%40%23292929%40%23f1f1f1%40%2354bb38%40%23cacf36%40%23cccccc%40%23a6a6a6" type="text/css" media="screen">
<link url="icons" rel="stylesheet" href="/static/icons.theme?width=800&setup_8=1&setup_9=1" type="text/css" media="screen">
<script type="text/javascript" async="" src="http://mc.yandex.ru/metrika/watch.js"></script><script type="text/javascript" src="/static/js/big.js"></script>
</head>
<body style="padding-top: 270px; text-align: center; color: rgb(255, 255, 255);">It seems that your browser is using traffic compression, please, turn it off in browser settings or use another one.</body></html>
ブラウザのトラフィック圧縮が何であるかよくわかりません。しかし、私は次のことを試しました。
- 最新バージョンのFirefoxとChromeを使用してください。
Firefox Web ドライバの許容エンコーディングを空の文字列に設定します。
FirefoxProfile firefoxProfile = new FirefoxProfile(); firefoxProfile.setPreference("browser.privatebrowsing.autostart",true); firefoxProfile.setPreference("network.http.accept-encoding", ""); FirefoxOptions firefoxOptions = new FirefoxOptions(); firefoxOptions.setProfile(firefoxProfile); driver = new FirefoxDriver(firefoxOptions);
他のウェブサイトも正常に閲覧が可能で、同じウェブサイトも私が所有するWindows 10ワークステーションで正常に閲覧が可能です。ただし、Linuxでは上記の本文を返します。
ベストアンサー1
トラフィック圧縮が何を意味するのかを説明しようとすることができます。
トラフィック圧縮はトラフィックを節約するために使用され、Webサイトの速度をわずかに向上させます。 Web サーバーは、要求の処理方法を知るために、特別なヘッダーを受信して要求を処理します。一般ユーザーはブラウザがこれを処理するので心配する必要はありませんので、URLだけを入力してアクセスするだけです。 Webサーバー上のファイルを圧縮し、圧縮ファイルをクライアントに送信するために圧縮を有効にする特別なヘッダーがあります。クライアントはこれらのファイルを解凍してユーザーに表示する必要があります。
カールがある場合は、次のコマンドを使用してテストできます。
curl -I -H "Accept-Encoding: gzip,deflate" http://www.google.com
次の行を出力する必要があります。
Content-Encoding: gzip
このメッセージが表示された場合はトラフィックが圧縮されているため、最初に解凍する必要があります。今「-I」を削除すると、ASCIIアートがたくさん表示されますが、便利な出力は表示されません。 Curlは「--compress」オプションを使用して解凍できます。
今すぐ圧縮を無効にするには、ヘッダーを削除する必要があります。この例では、-Hフラグとヘッダーのみを削除します。
curl -I http://www.google.com
これで、「コンテンツエンコード」が消え、圧縮を使用しません。 Web サーバーは非圧縮出力を提供します。もう一度 -I オプションを削除すると、google.com のコードが表示されます。
ほとんどの(CLI)ブラウザは圧縮を利用するためにヘッダーを送信します。
セレンについてはよくわかりませんが、特別なヘッダーを送信するための同様のオプションがありますか、カールで置き換えることができますか? ;)