问题标签 [pyppeteer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2068 浏览

python-3.x - RuntimeError:事件循环已关闭

我正在尝试将 pyppeteer 和 quart 结合起来,但是由于启动浏览器需要很多时间,我宁愿全局处理它(使用异步锁),这似乎意味着我需要手动处理清理。这是我的最小代码示例:

这就是问题的样子:

0 投票
0 回答
199 浏览

python-3.x - pyppeteer script crashing after pressing Ctrl+C

Consider the following code:

If I run it, then hit Ctrl+C after a few, but less than 10 seconds, I get a few error messages and what seems to be an infinite loop:

What's wrong? I can see that pyppeteer has an atexit handler defined, why is it misbehaving?

0 投票
0 回答
1127 浏览

python - pyppeteer.errors.BrowserError:无法连接到浏览器端口

requests-html在 Python 3.6.5、Ubuntu 16.04(x64) 上使用包时遇到问题。更具体地说,最后一行

产生以下错误:

Traceback(最近一次调用最后一次):文件“”,第 1 行,在

File "/home/candy/.conda/envs/candy_env/lib/python3.6/site-packages/requests_html.py", line 572, in render self.session.browser # 自动创建事件循环和浏览器

文件“/home/candy/.conda/envs/candy_env/lib/python3.6/site-packages/requests_html.py”,第 680 行,在浏览器中 self._browser = self.loop.run_until_complete(pyppeteer.launch(headless=是的,args=['--no-sandbox']))

文件“/home/candy/.conda/envs/candy_env/lib/python3.6/asyncio/base_events.py”,第 468 行,在 run_until_complete 返回 future.result()

文件“/home/candy/.conda/envs/candy_env/lib/python3.6/site-packages/pyppeteer/launcher.py”,第 243 行,在启动返回等待 Launcher(options, **kwargs).launch()

文件“/home/candy/.conda/envs/candy_env/lib/python3.6/site-packages/pyppeteer/launcher.py”,第 160 行,在启动时 self.browserWSEndpoint = self._get_ws_endpoint()

_get_ws_endpoint 中的文件“/home/candy/.conda/envs/candy_env/lib/python3.6/site-packages/pyppeteer/launcher.py”,第 178 行引发 BrowserError(f'无法连接到浏览器端口:{url }')

pyppeteer.errors.BrowserError:无法连接到浏览器端口:http: //127.0.0.1 :43623/json/version

但是,相同的代码在另一个 Windows 10 平台上运行良好且没有错误,配置了相同的 Python 要求。

我检查了我的电脑上是否已经成功下载了Chrome,结果是yes!所以我认为这不是问题所在。

(candy_env) candy@botwriter01:~/.pyppeteer/local-chromium/543305/chrome-linux$ ls chrome chrome_sandbox libclearkeycdm.so locales nacl_helper_bootstrap natives_blob.bin resources.pak
xdg-mime chrome_100_percent.pak chrome-wrapper libEGL.so
MEIPreload nacl_helper_nonsfi product_logo_48.png swiftshader
xdg-settings chrome_200_percent.pak icudtl.dat libGLESv2.so
nacl_helper nacl_irt_x86_64.nexe 资源
v8_context_snapshot.bin

我已经在指南中搜索了requests-html答案,但一无所获。我希望命令r.html.render()正常工作,我现在该怎么办?

0 投票
1 回答
3575 浏览

python - Python:使用 asyncio 的 Pyppeteer

我正在做一些测试,我想知道下面的脚本是否异步运行?

31(站点)x 1.34 = 41.54s - 所以它少了几秒钟,但理论上它应该只需要最长的请求?

也许在这里打开浏览器不是异步的,我应该为此使用执行器?

0 投票
1 回答
2871 浏览

python - pyppeteer setCookie 问题

当我将 pyppeteer 与 cookie 一起使用时,会引发以下异常

文件“test.py”,第 33 行,在 asyncio.get_event_loop().run_until_complete(main())

文件“/usr/local/python3.6/lib/python3.6/asyncio/base_events.py”,第 468 行,在 run_until_complete 返回 future.result()

主要等待 page.setCookie(cookies) 中的文件“test.py”,第 25 行

文件“/usr/local/python3.6/lib/python3.6/site-packages/pyppeteer/page.py”,第 392 行,在 setCookie 中等待 self.deleteCookie(*items)

文件“/usr/local/python3.6/lib/python3.6/site-packages/pyppeteer/page.py”,第 373 行,在 deleteCookie 中等待 self._client.send('Network.deleteCookies', item)

文件“/usr/local/python3.6/lib/python3.6/site-packages/pyppeteer/connection.py”,第 200 行,在发送返回等待回调

pyppeteer.errors.NetworkError:协议错误:无效参数名称:应为字符串值

我列出的代码:

0 投票
2 回答
5379 浏览

python - Python:Pyppeteer 点击弹出窗口

我正在尝试在此页面上生成的弹出窗口中接受 cookie 同意。我尝试使用waitForSelector,但我使用的选择器似乎对无头浏览器不可见。我想实际切换到“是”,然后提交表格。我想它已经显示了,window.onload所以也许这需要在 JavaScript 中完成?

0 投票
1 回答
138 浏览

docker - 如何在 Pyppeteer 中使用本地 DNS

我有一个反向代理、前端和后端容器。后端运行Pyppeteer,反向代理在 docker-compose.yml 中设置了别名“servicename.localhost”:

这样我就可以curl --insecure https://servicename.localhost从后端容器中获取,但不幸的是,同一容器上的 Chromium 似乎忽略了该设置,因此“servicename.localhost”解析为 127.0.0.1:

pyppeteer.errors.PageError: net::ERR_CONNECTION_REFUSED 在https://servicename.localhost/login

我该如何解决这个问题?

看起来它可能与DNS 预取异步 DNS有关,但似乎没有命令行标志来禁用它们中的任何一个。

我尝试过的事情并没有改变任何事情:

  • 添加"--host-rules='MAP servicename.localhost {}'".format(socket.gethostbyaddr('servicename.localhost')[-1][0])pyppeteer.launch args列表参数。
  • 添加"--host-resolver-rules=[same as above]pyppeteer.launch args列表参数。
0 投票
1 回答
2960 浏览

python - Python:在 pyppeteer 中保持打开浏览器并创建 CDPSession

我有两个问题暂时无法解决。

1.我想让浏览器保持运行,这样我就可以使用pyppeteer.launcher.connect()函数重新连接,但即使我不调用它似乎也立即关闭了pyppeteer.browser.Browser.close()

测试01.py:

2.如何创建 CDP 会话。此代码应该打开另一个浏览器窗口,但它没有按预期工作:

测试02.py

0 投票
1 回答
3401 浏览

python - pyppeteer 和 javascript 查询

我试图将使用 puppeteer 的节点项目迁移到使用 pyppeteer 的 python 项目。

我有以下 javascript 查询,它工作正常。

当我尝试在 python/pyppeteer 中做同样的事情时:

我收到此错误:

如何使查询在 python 中工作?

0 投票
1 回答
949 浏览

javascript - 在 Pyppeteer 中,设置超时时间并非在所有情况下都有效

我将 Pyppeteer 中的超时时间设置为 60 秒,但它不适用于所有页面。这是我的代码:

我尝试使用超时加载此 URL:http ://www.google.com:81 但 60 秒后它不会引发超时异常。4 分钟后它会引发net::ERR_TIMED_OUT 我如何设置页面的超时时间?