在Ubuntu 11.04中运行xvfb时出错

13 投票
2 回答
9808 浏览
提问于 2025-04-17 09:56

我的任务是用无头的网页浏览器(PyQt4.QtWebkit)在Python中抓取谷歌搜索结果。这个模块在使用PyQt4时抓取结果很顺利。不过,我需要在亚马逊的EC2服务器上运行这个脚本。所以,我需要使用Xvfb(因为EC2上没有图形界面服务器)。

同时,我的模块需要在一个循环中执行。最开始运行得很好,但经过几次循环后,模块就出现了"xvfb-run: error: Xvfb failed to start"的错误。

这个问题该怎么解决呢?

这是我的循环代码:

for i in range(10):
    try:
        query_dict["start"] = i * 10
        url = base_url + ue(query_dict)
        flag = True
        while flag:
            parsed_dict = main(url)
            time.sleep(8.4)
            flag = False
    except:
        pass

main(url) :

def main(url):
    cmd = "xvfb-run python /home/shan/temp/hg_intcen/lib/webpage_scrapper.py"+" "+str(url)
    print "Cmd EXE:"+ cmd
    proc = subprocess.Popen(cmd,shell=True,stdin=subprocess.PIPE,stdout=subprocess.PIPE)
    proc.wait()
    sys.stdout.flush()
    result = proc.stdout.readlines()
    print "crawled: ",result[1]
    return result

webpage_scrapper会使用pyqt4抓取所有的HTML结果。有什么办法可以避免在循环中出现xvfb启动失败的情况吗?

2 个回答

10

这样运行:

xvfb-run --auto-servernum --server-num=1 python webpage_scrapper.py http://google.com
27

你需要给 xvfb-run 加上 --auto-servernum 这个参数。否则,它会试图在同一个显示器上启动 Xvfb(默认是 :99),如果你已经有一个在运行的话,这样就会失败。

撰写回答