我正在使用Scrapy來滿足我的爬行需求。對於動態網頁,我使用Selenium在Firefox中加載頁面。由於代碼將在AWS實例上運行,因此我使用PyVirtualDisplay爲Firefox創建虛擬顯示。整個過程在幾個月內運行良好,直到今天停止,沒有任何代碼修改。無法從Scrapy腳本啓動Firefox,但它從命令行運行良好
現在,當我使用命令scrapy crawl amazon
運行我的履帶,我得到一個錯誤說:
消息:瀏覽器似乎已經離開我們可以連接之前。 如果您在FirefoxBinary構造函數中指定了一個log_file,請參閱 瞭解詳細信息。
所以我試着檢查它是否能在shell上工作。我致力於:
scrapy shell <url>
>>> from selenium import webdriver
>>> from pyvirtualdisplay import Display
>>> display = Display(visible=0, size=(800, 600))
>>> display.start()
<Display cmd_param=['Xvfb', '-br', '-screen', '0', '800x600x24', ':106835'] cmd=['Xvfb', '-br', '-screen', '0', '800x600x24', ':106835'] oserror=None returncode=None stdout="None" stderr="None" timeout=False>
>>> browser = webdriver.Firefox()
>>> browser.get(response.url)
正如你所看到的,firefox窗口在這裏打開沒有任何錯誤。在這之後,我甚至可以看到firefox作爲一個進程運行。
ps -ef | grep的火狐
的ubuntu 26377 24202 42 19:12 PTS/1 00:00:01 /usr/lib中/火狐/火狐-foreground
的ubuntu 26435 31306 0 19:12 PTS/0 00:00: 00 grep --color = auto firefox
我甚至可以找到元素,並通過shell完成所有工作。爲什麼通過腳本不能完成相同的工作?
謝謝你回覆@Rahul。 是的,我可以關閉瀏覽器並使用'browser.close()'和'display.stop()'顯示。事實上,該腳本在另一個具有完全相同配置的系統上工作正常。正如我所說,它也用於這個系統的工作,但由於某種原因現在不工作。 –