저는 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 웹 드라이버의 허용되는 인코딩을 빈 문자열로 설정합니다.
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
트래픽 압축이 무엇을 의미하는지 설명하려고 노력할 수 있습니다.
트래픽 압축은 트래픽을 절약하는 데 사용되며 웹 사이트 속도를 약간 향상시킵니다. 웹 서버는 요청을 처리하는 방법을 알기 위해 특수 헤더를 수신하여 요청을 처리합니다. 일반 사용자는 브라우저가 이를 처리하므로 걱정할 필요가 없으므로 URL만 입력하고 액세스하면 됩니다. 웹 서버의 파일을 압축하고 압축된 파일을 클라이언트에 보내기 위해 압축을 활성화하는 특수 헤더가 있습니다. 이제 클라이언트는 이러한 파일의 압축을 풀어 사용자에게 표시해야 합니다.
컬이 있는 경우 다음 명령을 사용하여 테스트할 수 있습니다.
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
이제 "콘텐츠 인코딩"이 사라지고 압축을 사용하지 않습니다. 웹 서버는 압축되지 않은 출력을 제공합니다. 다시 한번 -I 옵션을 제거하면 google.com의 코드가 표시됩니다.
대부분의 (CLI) 브라우저는 압축을 활용하기 위해 헤더를 보냅니다...
셀레늄에 대해서는 잘 모르지만 특수 헤더를 보내는 비슷한 옵션이 있을 수도 있고 아니면 컬로 대체할 수도 있나요? ;)