2013-04-09 132 views
11

我在刮一些似乎对它有很好保护的网站。唯一可以实现它的方法是使用Selenium加载页面,然后从中提取内容。在服务器上运行硒浏览器(Flask/Python/Heroku)

目前这项工作在我的本地计算机上(当我访问我的页面时,Firefox窗口打开并关闭,并且HTML在我的脚本中进一步处理)。但是,我需要我的刮板可以在网络上访问。刮板嵌入在Heroku的Flask应用程序中。有没有办法让Selenium浏览器在Heroku服务器上工作?还是有任何托管服务提供商可以工作?

回答

11

Heroku虽然精彩,但它的主要限制在于不能使用自定义软件或许多情况下的库。在提供一个易于使用的,集中控制的托管堆栈的情况下,Heroku将其服务器剥离以防止其他用途。

这可归结为在Heroku测功机上没有Xorg。缺乏Xorg和缺乏安装定制软件的能力意味着无法使用xvfb,也无法运行硒预期存在的浏览器。而且,浏览器通常不可用。

您将拥有像AWS这样的云提供更好的运气,您可以在其中安装自定义软件,包括firefox,xvfb(以免需要所有Xorg开销),当然还有其他堆栈。 This answer解释了如何正确地做到这一点。

1

有构建包使selenium在heroku上工作。

添加以下buildpack。

1) heroku buildpacks:add https://github.com/kevinsawicki/heroku-buildpack-xvfb-google-chrome/ 
2) heroku buildpacks:add https://github.com/heroku/heroku-buildpack-chromedriver 

并设置heroku上堆到雪松-14,如下所示,如xvfb的buildpack仅与雪松-14的工作原理。

heroku stack:set cedar-14 -a stocksdata 

再点谷歌浏览器位置如下

options = ChromeOptions() 
options.binary_location = "/app/.apt/usr/bin/google-chrome-stable" 
driver = webdriver.Chrome(chrome_options=options) 
相关问题