Ubuntu 18.04服务器上安装 Chrome Headless
安装 Chrome Headless
Chrome 在最近推出了headless模式。原生的Chrome,更好的通用性,更快的速度……这些优点都足以表名目前来说 PhantomJS 已经要被取代了,果不其然,在最新版中的 Selenium 中已经不支持 PhantomJS了。
因此,为了学习 web2.0 的爬虫,必须得将 Chrome Headless 安装到服务器版的linux中运行。
在服务器的 Ubuntu 版本中必须得通过命令行安装:
sudo apt-get install libxss1 libappindicator1 libindicator7
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo dpkg -i google-chrome*.deb # Might show "errors", fixed by next line
sudo apt-get install -f
测试安装
启动 Chrome
google-chrome --headless --remote-debugging-port=9222 https://chromium.org --disable-gpu
这里是使用headless模式进行远程调试,ubuntu 上大多没有 gpu,所以–disable-gpu以免报错。
之后另开一个连接端口来访问本地的9222端口:
curl http://localhost:9222
看到如下信息就表明安装成功了
<html>
<head>
<title>Headless remote debugging</title>
<style>
</style>
<script>
const fetchjson = (url) => fetch(url).then(r => r.json());
function loadData() {
const getList = fetchjson("/json/list");
const getVersion = fetchjson('/json/version');
Promise.all([getList, getVersion]).then(parseResults);
}
function parseResults([listData, versionData]){
const version = versionData['WebKit-Version'];
const hash = version.match(/\s\(@(\b[0-9a-f]{5,40}\b)/)[1];
listData.forEach(item => appendItem(item, hash));
}
function appendItem(item, hash) {
let link;
if (item.devtoolsFrontendUrl) {
link = document.createElement("a");
var devtoolsFrontendUrl = item.devtoolsFrontendUrl.replace(/^\/devtools\//,'');
link.href = `https://chrome-devtools-frontend.appspot.com/serve_file/@${hash}/${devtoolsFrontendUrl}&remoteFrontend=true`;
link.title = item.title;
} else {
link = document.createElement("div");
link.title = "The tab already has active debugging session";
}
var text = document.createElement("div");
if (item.title)
text.textContent = item.title;
else
text.textContent = "(untitled tab)";
if (item.faviconUrl)
text.style.cssText = "background-image:url(" + item.faviconUrl + ")";
link.appendChild(text);
var p = document.createElement("p");
p.appendChild(link);
document.getElementById("items").appendChild(p);
}
</script>
</head>
<body onload='loadData()'>
<div id='caption'>Inspectable WebContents</div>
<div id='items'></div>
</body>
</html>
下载 chromedriver
chromedriver 提供了操作 Chrome 的api,是 Selenium 控制Chrome 的桥梁。查看最新的Chrome版本
下载并解压:
wget https://chromedriver.storage.googleapis.com/2.41/chromedriver_linux64.zip
unzip chromedriver_linux64.zip
安装完之后将解压出来的文件配置到环境变量中去
sudo vi ~/.profile
将 下载到的 chromedriver 的路径添加进去
export PATH="$PATH:/home/wx/application/chromedriver"
更新环境变量
source ~/.profile
使用 Selenium 和 Chrome Headless 来访问网页
from selenium import webdriver
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
client = webdriver.Chrome(chrome_options=chrome_options,executable_path='/home/wx/application/chromedriver')# 如果没有把chromedriver加入到PATH中,就需要指明路径
client.get("https://www.baidu.com")
content = client.page_source.encode('utf-8')
print (content)
client.quit()