我在刮一些似乎對它有很好保護的網站。唯一可以實現它的方法是使用Selenium加載頁面,然後從中提取內容。在服務器上運行硒瀏覽器(Flask/Python/Heroku)
目前這項工作在我的本地計算機上(當我訪問我的頁面時,Firefox窗口打開並關閉,並且HTML在我的腳本中進一步處理)。但是,我需要我的刮板可以在網絡上訪問。刮板嵌入在Heroku的Flask應用程序中。有沒有辦法讓Selenium瀏覽器在Heroku服務器上工作?還是有任何託管服務提供商可以工作?
我在刮一些似乎對它有很好保護的網站。唯一可以實現它的方法是使用Selenium加載頁面,然後從中提取內容。在服務器上運行硒瀏覽器(Flask/Python/Heroku)
目前這項工作在我的本地計算機上(當我訪問我的頁面時,Firefox窗口打開並關閉,並且HTML在我的腳本中進一步處理)。但是,我需要我的刮板可以在網絡上訪問。刮板嵌入在Heroku的Flask應用程序中。有沒有辦法讓Selenium瀏覽器在Heroku服務器上工作?還是有任何託管服務提供商可以工作?
Heroku雖然精彩,但它的主要限制在於不能使用自定義軟件或許多情況下的庫。在提供一個易於使用的,集中控制的託管堆棧的情況下,Heroku將其服務器剝離以防止其他用途。
這可歸結爲在Heroku測功機上沒有Xorg。缺乏Xorg和缺乏安裝定製軟件的能力意味着無法使用xvfb,也無法運行硒預期存在的瀏覽器。而且,瀏覽器通常不可用。
您將擁有像AWS這樣的雲提供更好的運氣,您可以在其中安裝自定義軟件,包括firefox,xvfb(以免需要所有Xorg開銷),當然還有其他堆棧。 This answer解釋瞭如何正確地做到這一點。
有構建包使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)