Alb*_* Ko 5 python google-chrome heroku django-celery selenium-webdriver
我已经在 heroku 上用 chrome 设置了 selenium,并将它设置为处理 celery 任务。但是,在执行了许多任务(可能是有错误的任务)之后,它会在任何站点上不断崩溃以进行抓取。如果我重新启动 celery worker,它将在刚刚崩溃的相同站点上再次开始工作。
这是错误:
File "/app/cheetahiq_selenium/browser.py", line 18, in chrome
'CHROMEDRIVER_PATH', ''), chrome_options=chrome_options)
File "/app/.heroku/python/lib/python3.6/site-packages/selenium/webdriver/chrome/webdriver.py", line 81, in __init__
desired_capabilities=desired_capabilities)
File "/app/.heroku/python/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 157, in __init__
self.start_session(capabilities, browser_profile)
File "/app/.heroku/python/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 252, in start_session
response = self.execute(Command.NEW_SESSION, parameters)
File "/app/.heroku/python/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "/app/.heroku/python/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.SessionNotCreatedException: Message: session not created
from tab crashed
(Session info: headless chrome=80.0.3987.122)
Run Code Online (Sandbox Code Playgroud)
这是我正在设置的标志:
chrome_options = webdriver.ChromeOptions()
prefs = {
"download.open_pdf_in_system_reader": False,
"download.prompt_for_download": True,
"plugins.always_open_pdf_externally": False
}
chrome_options.add_experimental_option(
"prefs", prefs
)
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--window-size=1280x1696')
chrome_options.add_argument('--hide-scrollbars')
chrome_options.add_argument('--single-process')
chrome_options.add_argument('--ignore-certificate-errors')
chrome_options.add_argument('--disable-dev-shm-usage')
if os.environ.get('ON_HEROKU', False):
chrome_options.binary_location = os.environ.get(
'GOOGLE_CHROME_BIN', '')
driver = webdriver.Chrome(executable_path=os.environ.get(
'CHROMEDRIVER_PATH', ''), chrome_options=chrome_options)
else:
driver = webdriver.Chrome(chrome_options=chrome_options)
chrome_options.add_argument("--example-flag")
driver.delete_all_cookies()
return driver
Run Code Online (Sandbox Code Playgroud)
对于芹菜,我也在设置
--concurrency=1 --max-tasks-per-child=1
Run Code Online (Sandbox Code Playgroud)
所以它为每项任务创建一个新子项,但仍有一些东西被传递到未来的会话中。
我假设 chrome 驱动程序在机器上保存了一些存储空间,但每次都不会被清除,但我想我已将标志设置为尽可能禁用。有什么我在那里想念的吗?
我确实可以选择每次强制重新启动 celery worker,但我正在寻找如何正确设置 selenium 驱动程序。
我正在测试许多关闭驱动程序的标志和方法,但到目前为止都没有成功(这不容易重现,因为它只发生在处理多个站点之后,或者可能在驱动程序中遇到一些错误)。
| 归档时间: |
|
| 查看次数: |
335 次 |
| 最近记录: |