我正在使用 selenium 在运行 Debian 9 操作系统(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 webdriver 的接受编码设置为空字符串。
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
我只能尝试解释一下流量压缩的含义:
流量压缩用于节省流量,并且应该会稍微加快网站速度。网络服务器通过接收特殊标头来处理请求,以了解如何处理请求。普通用户不必担心,因为浏览器会为您处理,因此您只需输入网址即可访问。有一个特殊的标头用于启用压缩以在网络服务器上压缩文件并将它们压缩发送到客户端。客户端现在必须解压缩这些文件以将它们显示给用户。
如果你有curl,你可以用这个命令测试它:
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)浏览器将发送标头以利用压缩的优势......
我不知道selenium,但可能有类似的选项来发送特殊标头,或者您可以用curl 替换它? ;)