【发布时间】: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