我正在使用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()'显示。事实上,该脚本在另一个具有完全相同配置的系统上工作正常。正如我所说,它也用于这个系统的工作,但由于某种原因现在不工作。 –