【问题标题】:PhantomJS randomly does not exit (using Selenium with Python)PhantomJS 随机不退出(使用 Selenium 和 Python)
【发布时间】:2014-06-06 10:49:27
【问题描述】:

我将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
  • 我正在使用 Debian Wheezy
  • 我从源代码编译 PhamtomJS 并创建了一个符号链接,如下所示:ln -s /opt/phantomjs/bin/phantomjs /usr/local/bin/

有人可以建议一种调试方法并找出这是谁的错吗?

【问题讨论】:

  • 你可以用你最喜欢的浏览器替换 PhantomJS,然后用 xvfbwrapper 把它放在 Linux 下的虚拟显示器上。如果这些过程持续存在,则可能是硒的问题。
  • 这将是切换到另一个浏览器(比如 Firefox 或带有 XVFB 的 Chromium)的最后一个解决方案。有没有其他方法可以调试并找出这是谁的错?
  • 正如您可能阅读的那样,如果二进制文件符合您的需要,则不建议编译 phantomjs。从 debian repos 安装它或使用预编译文件怎么样?
  • PhantomJS 不包含在 wheezy repos 中。事实上,起初我选择了预编译的二进制文件,但性能很糟糕,然后我从源代码编译它,现在它工作得很好。 (我认为这是因为预编译的二进制文件是在 CentOS 机器中构建的)
  • 我没用过 celery,你确定 celery 会为你显示所有的错误信息吗?对于你的代码,我认为如果在运行wait.until时出现异常,driver.quit()将不会被执行。

标签: python selenium phantomjs celery


【解决方案1】:

我以前没有用过 celery,你确定 celery 会为你显示所有的错误信息吗?对于你的代码,我认为如果在运行wait.until(...)时出现异常,driver.quit()将不会被执行。

【讨论】:

  • 谢谢 :) 这是一个愚蠢的错误!关键是 celery 正在重试任务,所以情况越来越糟,我看到的只是一些 RetryException 消息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
  • 1970-01-01
  • 2017-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多