ClericPy / ichrome

Chrome controller for Humans, based on Chrome Devtools Protocol(CDP) and python3.7+.
https://pypi.org/project/ichrome/
MIT License
227 stars 29 forks source link

launch_chrome failed for proc not ok #137

Closed vvanglro closed 1 year ago

vvanglro commented 1 year ago

你好, 在ubuntu上如何使用呢.

使用下面的命令下载后填入地址后运行会报错.

python -m ichrome --install=./chromium
import asyncio
from ichrome import AsyncChromeDaemon

async def test():
    async with AsyncChromeDaemon(chrome_path="/home/hulk/chromium/chrome-linux/chrome",headless=True, disable_image=False) as cd:
        # Privacy Mode, proxyServer arg maybe not work on Chrome, for `Target.createBrowserContext` is the EXPERIMENTAL feature(but chromium is ok).
        # https://chromedevtools.github.io/devtools-protocol/tot/Target/#method-createBrowserContext
        async with cd.incognito_tab(proxyServer='http:192.168.5.112:7890') as tab:
            await tab.goto('http:httpbin.org/ip', timeout=10)
            # print and watch your IP changed
            print(await tab.html)

asyncio.run(test())
ERROR 2023-08-17 11:53:11 [ichrome] daemon.py(835): launch_chrome failed for proc not ok
Traceback (most recent call last):
  File "/home/hulk/test_ichrome.py", line 16, in <module>
    asyncio.run(test())
  File "/home/hulk/miniconda3/envs/py311/lib/python3.11/asyncio/runners.py", line 190, in run
    return runner.run(main)
           ^^^^^^^^^^^^^^^^
  File "/home/hulk/miniconda3/envs/py311/lib/python3.11/asyncio/runners.py", line 118, in run
    return self._loop.run_until_complete(task)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/hulk/miniconda3/envs/py311/lib/python3.11/asyncio/base_events.py", line 653, in run_until_complete
    return future.result()
           ^^^^^^^^^^^^^^^
  File "/home/hulk/test_ichrome.py", line 6, in test
    async with AsyncChromeDaemon(chrome_path="/home/hulk/chromium/chrome-linux/chrome",headless=True, disable_image=False) as cd:
  File "/home/hulk/miniconda3/envs/py311/lib/python3.11/site-packages/ichrome/daemon.py", line 938, in __aenter__
    return await self._init_coro
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/hulk/miniconda3/envs/py311/lib/python3.11/site-packages/ichrome/daemon.py", line 807, in _init_chrome_daemon
    await self.launch_chrome()
  File "/home/hulk/miniconda3/envs/py311/lib/python3.11/site-packages/ichrome/daemon.py", line 836, in launch_chrome
    raise ChromeRuntimeError(error)
ichrome.exceptions.ChromeRuntimeError: launch_chrome failed for proc not ok
Exception ignored in atexit callback: <bound method ChromeDaemon.cleanup_launched_pids of <class 'ichrome.daemon.ChromeDaemon'>>
Traceback (most recent call last):
  File "/home/hulk/miniconda3/envs/py311/lib/python3.11/site-packages/ichrome/daemon.py", line 190, in cleanup_launched_pids
    kill_pid(pid)
  File "/home/hulk/miniconda3/envs/py311/lib/python3.11/site-packages/ichrome/base.py", line 397, in kill_pid
    proc = psutil.Process(pid)
           ^^^^^^^^^^^^^^^^^^^
  File "/home/hulk/miniconda3/envs/py311/lib/python3.11/site-packages/psutil/__init__.py", line 332, in __init__
    self._init(pid)
  File "/home/hulk/miniconda3/envs/py311/lib/python3.11/site-packages/psutil/__init__.py", line 373, in _init
    raise NoSuchProcess(pid, msg='process PID not found')
psutil.NoSuchProcess: process PID not found (pid=4617)
python -m ichrome -p 9222

ERROR 2023-08-17 12:11:33 [ichrome] daemon.py(835): launch_chrome failed for proc not ok
Traceback (most recent call last):
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "/home/hulk/miniconda3/envs/py311/lib/python3.11/site-packages/ichrome/__main__.py", line 292, in <module>
    sys.exit(main())
             ^^^^^^
  File "/home/hulk/miniconda3/envs/py311/lib/python3.11/site-packages/ichrome/__main__.py", line 286, in main
    asyncio.run(
  File "/home/hulk/miniconda3/envs/py311/lib/python3.11/asyncio/runners.py", line 190, in run
    return runner.run(main)
           ^^^^^^^^^^^^^^^^
  File "/home/hulk/miniconda3/envs/py311/lib/python3.11/asyncio/runners.py", line 118, in run
    return self._loop.run_until_complete(task)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/hulk/miniconda3/envs/py311/lib/python3.11/asyncio/base_events.py", line 653, in run_until_complete
    return future.result()
           ^^^^^^^^^^^^^^^
  File "/home/hulk/miniconda3/envs/py311/lib/python3.11/site-packages/ichrome/daemon.py", line 1105, in run_chrome_workers
    await cd.wait()
  File "/home/hulk/miniconda3/envs/py311/lib/python3.11/site-packages/ichrome/daemon.py", line 1094, in wait
    await task
  File "/home/hulk/miniconda3/envs/py311/lib/python3.11/site-packages/ichrome/daemon.py", line 1079, in start_daemon
    async with cd:
  File "/home/hulk/miniconda3/envs/py311/lib/python3.11/site-packages/ichrome/daemon.py", line 938, in __aenter__
    return await self._init_coro
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/hulk/miniconda3/envs/py311/lib/python3.11/site-packages/ichrome/daemon.py", line 807, in _init_chrome_daemon
    await self.launch_chrome()
  File "/home/hulk/miniconda3/envs/py311/lib/python3.11/site-packages/ichrome/daemon.py", line 836, in launch_chrome
    raise ChromeRuntimeError(error)
ichrome.exceptions.ChromeRuntimeError: launch_chrome failed for proc not ok
ClericPy commented 1 year ago

http:192.168.5.112:7890 错了啊, 两个斜杠呢

ClericPy commented 1 year ago

不过你这报错应该是 linux 上的问题 先试试 /home/hulk/chromium/chrome-linux/chrome --version

ClericPy commented 1 year ago

然后文档里有提到

Download & unzip the latest version of Chromium browser python3 -m ichrome --install="/home/root/chrome_bin"

WARNING:

install the missing packages yourself use ldd chrome | grep not on linux to check and install them, or view the link: Checking out and building Chromium on Linux add --no-sandbox to extra_configs to avoid No usable sandbox errors, unless you really need sandbox: Chromium: "Running without the SUID sandbox!" error - Ask Ubuntu

vvanglro commented 1 year ago

嗯 我不调入chrome path就ok

ClericPy commented 1 year ago

目测就是 chrome/Chromium 有问题. 上面提到了 sandbox 之类的参数来避免

ClericPy commented 1 year ago

你不传入 chrome 路径, ichrome 会自动查询可用路径. 多个平台的常见路径都加入进去了, 可以参考源码

linux 上经常有各种权限问题所以要么给 777 要么禁止 sandbox