繁体   English   中英

尝试在 JupyterLabs 中使用 Playwright - 未实现

[英]Trying to use Playwright in JupyterLabs - Not implemented

提示:本站为国内最大中英文翻译问答网站,提供中英文对照查看,鼠标放在中文字句上可显示英文原文

一直试图让 Playwright 在 Windows 的 Jupyter 实验室工作...Jupyter Labs 3.5.2、Python 3.9.15、Playwright 1.29.0。 代码是...

import asyncio

from playwright.async_api import async_playwright

async def main():
    async with async_playwright() as p:
        browser = await p.chromium.launch()
        page = await browser.new_page()
        await page.goto("http://playwright.dev")
        print(await page.title())
        await browser.close()
        
await main()

错误是:

Task exception was never retrieved
future: <Task finished name='Task-5' coro=<Connection.run() done, defined at C:\Users\Larry\anaconda3\envs\TDA_virtual\lib\site-packages\playwright\_impl\_connection.py:240> exception=NotImplementedError()>
Traceback (most recent call last):
  File "C:\Users\Larry\anaconda3\envs\TDA_virtual\lib\site-packages\playwright\_impl\_connection.py", line 247, in run
    await self._transport.connect()
  File "C:\Users\Larry\anaconda3\envs\TDA_virtual\lib\site-packages\playwright\_impl\_transport.py", line 132, in connect
    raise exc
  File "C:\Users\Larry\anaconda3\envs\TDA_virtual\lib\site-packages\playwright\_impl\_transport.py", line 120, in connect
    self._proc = await asyncio.create_subprocess_exec(
  File "C:\Users\Larry\anaconda3\envs\TDA_virtual\lib\asyncio\subprocess.py", line 236, in create_subprocess_exec
    transport, protocol = await loop.subprocess_exec(
  File "C:\Users\Larry\anaconda3\envs\TDA_virtual\lib\asyncio\base_events.py", line 1676, in subprocess_exec
    transport = await self._make_subprocess_transport(
  File "C:\Users\Larry\anaconda3\envs\TDA_virtual\lib\asyncio\base_events.py", line 498, in _make_subprocess_transport
    raise NotImplementedError
NotImplementedError
---------------------------------------------------------------------------
NotImplementedError                       Traceback (most recent call last)
Cell In[1], line 16
     13         print(await page.title())
     14         await browser.close()
---> 16 await main()

Cell In[1], line 9, in main()
      8 async def main():
----> 9     async with async_playwright() as p:
     10         browser = await p.chromium.launch()
     11         page = await browser.new_page()

File ~\anaconda3\envs\TDA_virtual\lib\site-packages\playwright\async_api\_context_manager.py:46, in PlaywrightContextManager.__aenter__(self)
     44 if not playwright_future.done():
     45     playwright_future.cancel()
---> 46 playwright = AsyncPlaywright(next(iter(done)).result())
     47 playwright.stop = self.__aexit__  # type: ignore
     48 return playwright

File ~\anaconda3\envs\TDA_virtual\lib\site-packages\playwright\_impl\_connection.py:247, in Connection.run(self)
    244 async def init() -> None:
    245     self.playwright_future.set_result(await self._root_object.initialize())
--> 247 await self._transport.connect()
    248 self._init_task = self._loop.create_task(init())
    249 await self._transport.run()

File ~\anaconda3\envs\TDA_virtual\lib\site-packages\playwright\_impl\_transport.py:132, in PipeTransport.connect(self)
    130 except Exception as exc:
    131     self.on_error_future.set_exception(exc)
--> 132     raise exc
    134 self._output = self._proc.stdin

File ~\anaconda3\envs\TDA_virtual\lib\site-packages\playwright\_impl\_transport.py:120, in PipeTransport.connect(self)
    117     if getattr(sys, "frozen", False):
    118         env.setdefault("PLAYWRIGHT_BROWSERS_PATH", "0")
--> 120     self._proc = await asyncio.create_subprocess_exec(
    121         str(self._driver_executable),
    122         "run-driver",
    123         stdin=asyncio.subprocess.PIPE,
    124         stdout=asyncio.subprocess.PIPE,
    125         stderr=_get_stderr_fileno(),
    126         limit=32768,
    127         creationflags=creationflags,
    128         env=env,
    129     )
    130 except Exception as exc:
    131     self.on_error_future.set_exception(exc)

File ~\anaconda3\envs\TDA_virtual\lib\asyncio\subprocess.py:236, in create_subprocess_exec(program, stdin, stdout, stderr, loop, limit, *args, **kwds)
    229     warnings.warn("The loop argument is deprecated since Python 3.8 "
    230                   "and scheduled for removal in Python 3.10.",
    231                   DeprecationWarning,
    232                   stacklevel=2
    233     )
    234 protocol_factory = lambda: SubprocessStreamProtocol(limit=limit,
    235                                                     loop=loop)
--> 236 transport, protocol = await loop.subprocess_exec(
    237     protocol_factory,
    238     program, *args,
    239     stdin=stdin, stdout=stdout,
    240     stderr=stderr, **kwds)
    241 return Process(transport, protocol, loop)

File ~\anaconda3\envs\TDA_virtual\lib\asyncio\base_events.py:1676, in BaseEventLoop.subprocess_exec(self, protocol_factory, program, stdin, stdout, stderr, universal_newlines, shell, bufsize, encoding, errors, text, *args, **kwargs)
   1674     debug_log = f'execute program {program!r}'
   1675     self._log_subprocess(debug_log, stdin, stdout, stderr)
-> 1676 transport = await self._make_subprocess_transport(
   1677     protocol, popen_args, False, stdin, stdout, stderr,
   1678     bufsize, **kwargs)
   1679 if self._debug and debug_log is not None:
   1680     logger.info('%s: %r', debug_log, transport)

File ~\anaconda3\envs\TDA_virtual\lib\asyncio\base_events.py:498, in BaseEventLoop._make_subprocess_transport(self, protocol, args, shell, stdin, stdout, stderr, bufsize, extra, **kwargs)
    494 async def _make_subprocess_transport(self, protocol, args, shell,
    495                                      stdin, stdout, stderr, bufsize,
    496                                      extra=None, **kwargs):
    497     """Create subprocess transport."""
--> 498     raise NotImplementedError

NotImplementedError: 

已经尝试了我发现的所有内容,包括使用以下每个注释行修改 Asyncio 的init .py:

import asyncio

if sys.platform == 'win32':
    from .windows_events import *
#    asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
#    asyncio.set_event_loop_policy(asyncio.WindowsProactorEventLoopPolicy())
    __all__ += windows_events.__all__
else:
    from .unix_events import *  # pragma: no cover
    __all__ += unix_events.__all__

到目前为止没有喜悦......任何人的帮助将不胜感激。

我相信错误来自 Playwright _transport.py 例程中的以下片段

 try:
            # For pyinstaller
            env = get_driver_env()
            if getattr(sys, "frozen", False):
                env.setdefault("PLAYWRIGHT_BROWSERS_PATH", "0")

            self._proc = await asyncio.create_subprocess_exec(
                str(self._driver_executable),
                "run-driver",
                stdin=asyncio.subprocess.PIPE,
                stdout=asyncio.subprocess.PIPE,
                stderr=_get_stderr_fileno(),
                limit=32768,
                creationflags=creationflags,
                env=env,
            )
        except Exception as exc:
            self.on_error_future.set_exception(exc)
            raise exc

我在想 JupyterLabs 的 IOLoop 是 selectoreventlooppolicy 并且不支持管道,也许这就是“未实现”的意思,但我仍在深入研究它是否属实以及是否可以修改行为.

再次感谢所有输入。

该问题似乎特定于 Windows 平台,并且在原始问题中确定为在 JupyterLabs 中使用 SelectorEventLoopPolicy 而不是 ProactorEventloopPolicy 是问题的根源。

由于 SelectorEventLoopPolicy 不支持 Pipes,当 Playwright 第一次尝试打开一个 pipe 时,会出现 Not implemented 错误。这个链接标识了 JupyterLab 的 EventLoopPolicy 是在 ipykernel 的例程 kernelapp.py 中设置的。

        if sys.platform.startswith("win") and sys.version_info >= (3, 8):
            import asyncio

            try:
                from asyncio import (
                    WindowsProactorEventLoopPolicy,
                    WindowsSelectorEventLoopPolicy,
                )
            except ImportError:
                pass
                # not affected
            else:
                if type(asyncio.get_event_loop_policy()) is WindowsProactorEventLoopPolicy:
                    # WindowsProactorEventLoopPolicy is not compatible with tornado 6
                    # fallback to the pre-3.8 default of Selector
#Comment out  - 637              asyncio.set_event_loop_policy(WindowsSelectorEventLoopPolicy())
#Add this to complete the if     print(f'do not change to Selector Event Loop')

不确定这是否会对其他操作产生任何不利影响,但它确实会导致原始代码在 JupyterLab 中执行。

我将其实现为单独的环境以防它有副作用。 也许负责 JupyterLab 的人可以评论可能的副作用。

问题未解决?试试本站强大的搜索功能,搜索: 尝试在 JupyterLabs 中使用 Playwright - 未实现
如何使用 Playwright 与 Metamask 交互?

[英]How to use Playwright to interact with Metamask?

我想使用 Playwright 和 Python 自动与 Metamask 交互,但我不明白扩展是如何控制的。 当我打开浏览器时,扩展程序可能已配置也可能未配置。 每次请求扩展时,它都会在处理程序数组中打开一个新页面。 我如何掌握扩展、正确加载、配置网络、在正确的时间打开、知道哪个处理程序是正确的 ...

剧作家在暴露功能的范围内使用Page

[英]Playwright use Page within the context of exposed function

我在使用 Playwright 的expose_function API 时遇到问题。 我还希望能够将Page传递到公开函数中,以便能够在公开函数的上下文中导航、使用定位器等。 问题是公开函数中的 Page 实例以某种方式与其原始“断开连接”,并且不执行导航、定位器等。对 Page 方法的任何调用 ...

尝试使用 scrapy-playwright 抓取网站时出错

[英]Getting an error trying to scrape website using scrapy-playwright

我正在按照本教程来抓取网站这是我的代码: 这是爬行时产生的错误: 我尝试删除 for 循环并执行 wait_for_selector 并在没有它的情况下进行评估,但它给出了相同的错误。 我该如何解决这个问题? ...

如何在 jupyter notebook 中使用 Playwright 库而不是使用 .py 脚本

[英]How to use the Playwright library in jupyter notebook instead of using a .py script

我想使用自动浏览器并使用 jupyter 笔记本单元执行我的步骤,而不是使用 .py 脚本。 这适用于名为 selenium 的浏览器自动化库。 它不适用于名为 Playwright 的库。 事实上它根本不起作用。 我尝试了他们手册中提供的每一行代码。 在 jupyter notebooks 中没有 ...

有分页的web页面如何使用playwright和beautifulsoup?

[英]How to use playwright and beautifulsoup on web page which has pagination?

锁定65 天。 目前正在解决此问题的内容存在争议。 它目前不接受新的答案或互动。 我是 web 抓取的新手。 我想从这个 web 页https://forum.donanimhaber.com/turkcell-25-000-dk-12-000-sms-70-gb-inte.net-12-抓取数据 ...

如何使用 nix-shell 从 PyPi 安装 playwright?

[英]How to use nix-shell to install playwright from PyPi?

我正在尝试创建一个安装python和playwright的nix-shell 。 我的代码确实安装了 python,但我无法正确安装playwright 。with (import &lt;nixpkgs&gt; {}); let playwright = pkgs.python38Pack ...

如何在 spaCy 上为每个单词使用已实现的标签?

[英]How to use implemented labels on spaCy for each word?

我想做什么我想提取在 spaCy、自然语言 OSS 上给出特定 label 的单词。 spaCy 上的特定标签在下面的情况下,我希望打印单词English ,因为选择了 label LANGUAGE 。 问题没有用于在每个单词上提取标签的示例代码。 如何解决以下错误? 当前代码import sp ...

Jupyterlabs Notebook和命令行Python有不同的系统路径?

[英]Jupyterlabs Notebook and command line Python have different system path?

问题:从 Mac 终端运行 Jupyterlab 的笔记本时,将其设置为具有与 Python 相同的 sys.path 的最佳方法是什么? 背景:我可以通过从 Mac 终端(在名为 VENV 的虚拟环境中)启动 Python 成功使用 python 模块(美丽的汤)。 它可以安装,导入并正常工作。 ...

尝试在matplotlib中制作3D散点图时,&#39;TypeError:此类型未实现&#39;

[英]'TypeError: Not implemented for this type' when trying to make 3D scatterplot in matplotlib

我有以下代码在matplotlib中制作3D散点图 我有 打电话 但得到以下堆栈跟踪 所有输入数组都是相同的大小,所以这不是问题。 我尝试再次绘图,z是一个整数数组,但得到了同样的错误。 非常感谢帮助! ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2023 STACKOOM.COM