PhantomJS 随机不退出(使用 Python 的 Selenium)

5 投票
1 回答
886 浏览
提问于 2025-04-18 08:51

我正在使用selenium-python和PhantomJS。我的代码大致是这样的:

from selenium.webdriver import PhantomJS
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions
driver = PhantomJS()
wait = WebDriverWait(driver, 10)
driver.get(url)
while True:
    // scrap the page
    try:
        driver.find_elements_by_css_selector('.next')[0].click()
    except: break
    wait.until(expected_conditions.visibility_of_element_located((By.CSS_SELECTOR, '.loading')))
    wait.until(expected_conditions.invisibility_of_element_located((By.CSS_SELECTOR, '.loading')))
driver.quit()

我使用一个celery任务定期运行这段代码。问题是,有时候会出现一些过时的phantomjs进程。查看celery的日志时,任务显示成功完成,没有任何错误,但phantomjs进程仍然在运行。

一些额外的信息:

  • 我使用的是Python 3.2
  • 我使用的是Celery 3.1,并且开启了beat
  • 我使用的是Debian Wheezy
  • 我从源代码编译了PhantomJS,并创建了一个符号链接,命令是:ln -s /opt/phantomjs/bin/phantomjs /usr/local/bin/

有没有人能建议一个方法来调试,找出问题出在哪里?

1 个回答

2

我之前没有用过celery,你确定celery会把所有的错误信息都显示给你吗?对于你的代码,我觉得如果在运行wait.until(...)的时候发生了异常,那么driver.quit()就不会被执行。

撰写回答