我在一大組頁面上運行PhantomJS來刮取一些特定的JS生成的內容。我使用Python Selenium綁定,可以很容易地對結果執行XPath查詢。我注意到,如果我嘗試實例化一個webdriver.PhantomJS
對象並用它執行整個任務(通過「重複使用」它可以這麼說),我的腳本很快變得不穩定,伴隨着零星的內存和連接問題。我的下一個嘗試是嘗試爲每個渲染調用實例化一個新的驅動程序(並在完成時調用quit()
),這也適用於多個請求。我最後的嘗試是使用subprocess
將渲染調用隔離在其自己的進程空間中。但即使這種技術是迄今爲止最穩定的技術,但我仍然需要將我的整個腳本包裝在supervisor
中,以處理偶爾的打嗝。我真的很想知道我是否可能做錯了什麼,或者如果有什麼我應該知道的。據我所知,PhantomJS(和其他自動化瀏覽器)並不是真正意義上的本質(更多用於測試),但是有沒有辦法使其工作在非常穩定的狀態?PhantomJS在呈現多個頁面時的穩定性
0
A
回答
1
我使用硒與pyvirtualdisplay
與普通的瀏覽器類似於這樣的:Python - Headless Selenium WebDriver Tests using PyVirtualDisplay(儘管我使用的是Chrome;只是一個不同的驅動程序的問題)。
比我在節點和Python中使用PhantomJS的經驗穩定得多。以防萬一,您仍然可能想要使用流程管理器,但這種方式對我來說已經不那麼容易出錯。另外,我建議你寫一個Python包裝類,這樣你就可以使用with
塊,並確保你的環境總是被清理乾淨;如果你沒有適當地殺掉會話,你最終可能會遇到一個孤立的瀏覽器吃掉內存。
從我的項目:
import os, time
from selenium import webdriver
from pyvirtualdisplay import Display
class ChromeSession(object):
def __enter__(self):
self.display = Display(visible=0, size=(1024, 768))
self.display.start()
chromedriver = "/usr/lib/chromium/chromedriver"
os.environ["websession.chrome.driver"] = chromedriver
self.driver = webdriver.Chrome(chromedriver)
# Tell the driver to wait (if necessary) in case UI rendering takes a while...
self.driver.implicitly_wait(5)
return self.driver
def __exit__(self, exc_type, exc_val, exc_tb):
if exc_type:
print exc_type, exc_val
print exc_tb
self.driver.quit()
self.display.stop()
相關問題
- 1. PhantomJS無效頁面呈現
- 2. PhantomJs無法呈現源文件中的特定頁面
- 3. 用phantomjs呈現javascript網頁頁
- 4. 使PhantomJS等待整個頁面加載之前呈現爲PDF
- 5. 頁面呈現需要更多時間
- 6. 使用PhantomJS將多個網頁呈現爲pdf
- 7. Django同時呈現多個屬性?
- 8. 在頁面呈現時顯示Ajax Loader
- 9. 如何實現瀏覽頁面時穩定的導航欄?
- 10. Grails使用特定佈局和多個頁面呈現PDF?
- 11. 頁面中呈現XML屬性值
- 12. NodeJs - 在多個SELECT查詢後呈現相同的頁面
- 13. 呈現父頁面中的子頁面
- 14. PhantomJS:抓取多個URL時的空白頁面
- 15. ExtJS Grid呈現比頁面中指定的更多的行
- 16. Rails - 僅在顯示特定頁面時呈現部分
- 17. 如何用phantomjs同時打開多個頁面?
- 18. 返回多個數組穩定性
- 19. Google字體無法在PhantomJS中呈現
- 20. php在使用SimpleHTMLDOM呈現之前呈現頁面的內容
- 21. 爲每個gsp頁面呈現多個可排序表格?
- 22. kendo dropdownlist顯示頁面呈現時的選定值
- 23. Facelets:頁面未呈現
- 24. JSF頁面呈現兩次?
- 25. 兩遍JSP頁面呈現
- 26. Tomcat不呈現jsp頁面
- 27. 空白ASPX頁面呈現
- 28. ASP.net MVC呈現html頁面
- 29. Joomla - 頁面呈現控件
- 30. 頁面呈現正確,但刷新很多時間