2013-04-09 16 views
11

私はかなり良い保護をしているように見えるいくつかのウェブサイトを削っています。私はそれを動作させることができる唯一の方法は、セレンを使用してページをロードし、それから材料を掻き集めることです。サーバ上でセレンブラウザを実行しています(Flask/Python/Heroku)

は現在、これが私のローカルコンピュータ上で動作します(Firefoxのウィンドウが開き、閉じて私は自分のページにアクセスし、それはHTMLが私のスクリプトでさらに処理されていた場合)。しかし、私はスクレーパーがウェブ上でアクセス可能である必要があります。スクレーパーは、HerokuのFlaskアプリに組み込まれています。 HerokuサーバーでSeleniumブラウザを動作させる方法はありますか?または、それが動作するホスティングプロバイダがありますか?

答えて

11

Herokuのは、それは素晴らしいよう、カスタムソフトウェアを使用することはできません1つまたは多くの場合、ライブラリ内の主要な制限があります。使いやすい、集中管理された管理対象のスタックを提供する際に、Herokuは他の用途を防ぐためにサーバーを削除します。これはつまるところ何

は一切のXorgは、Herokuのダイナモではありませんです。 Xorgの欠如とカスタムソフトウェアのインストール能力の欠如は、xvfbもなく、セレンの存在を期待するブラウザを実行する能力もないことを意味します。さらに、ブラウザは一般に利用可能ではない。

firefox、xvfb(すべてのXorgオーバーヘッドを必要としないように)、そして残りのスクレイピングスタックなど、カスタムソフトウェアをインストールできるAWSのようなクラウドサービスがあれば、よりうまくいくでしょう。 This answerは正しく行う方法を説明しています。

1

herokuでセレンを動作させるためのビルドパックがあります。

以下のビルドパックを追加してください。

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で動作しますbuildpack XVFBとして、杉-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) 
以下のようにGoogleのクロムの場所を指し示します
関連する問題