【发布时间】:2015-11-19 19:21:23
【问题描述】:
我正在使用 Scrapy 来满足我的爬行需求。对于动态网页,我使用 Selenium 在 Firefox 中加载页面。由于代码要在 AWS 实例上运行,因此我使用 PyVirtualDisplay 为 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 分/1 00:00:01 /usr/lib/firefox/firefox -foreground
ubuntu 26435 31306 0 19:12 pts/0 00:00:00 grep --color=auto 火狐
我什至可以通过 shell 查找元素并完成所有工作。为什么不能通过脚本进行相同的工作?
【问题讨论】:
标签: python firefox selenium scrapy