问题标签 [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.
python-3.x - RuntimeError:事件循环已关闭
我正在尝试将 pyppeteer 和 quart 结合起来,但是由于启动浏览器需要很多时间,我宁愿全局处理它(使用异步锁),这似乎意味着我需要手动处理清理。这是我的最小代码示例:
这就是问题的样子:
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?
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()
正常工作,我现在该怎么办?
python - Python:使用 asyncio 的 Pyppeteer
我正在做一些测试,我想知道下面的脚本是否异步运行?
31(站点)x 1.34 = 41.54s - 所以它少了几秒钟,但理论上它应该只需要最长的请求?
也许在这里打开浏览器不是异步的,我应该为此使用执行器?
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:协议错误:无效参数名称:应为字符串值
我列出的代码:
python - Python:Pyppeteer 点击弹出窗口
我正在尝试在此页面上生成的弹出窗口中接受 cookie 同意。我尝试使用waitForSelector
,但我使用的选择器似乎对无头浏览器不可见。我想实际切换到“是”,然后提交表格。我想它已经显示了,window.onload
所以也许这需要在 JavaScript 中完成?
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
列表参数。
python - Python:在 pyppeteer 中保持打开浏览器并创建 CDPSession
我有两个问题暂时无法解决。
1.我想让浏览器保持运行,这样我就可以使用pyppeteer.launcher.connect()
函数重新连接,但即使我不调用它似乎也立即关闭了pyppeteer.browser.Browser.close()
。
测试01.py:
2.如何创建 CDP 会话。此代码应该打开另一个浏览器窗口,但它没有按预期工作:
测试02.py
python - pyppeteer 和 javascript 查询
我试图将使用 puppeteer 的节点项目迁移到使用 pyppeteer 的 python 项目。
我有以下 javascript 查询,它工作正常。
当我尝试在 python/pyppeteer 中做同样的事情时:
我收到此错误:
如何使查询在 python 中工作?
javascript - 在 Pyppeteer 中,设置超时时间并非在所有情况下都有效
我将 Pyppeteer 中的超时时间设置为 60 秒,但它不适用于所有页面。这是我的代码:
我尝试使用超时加载此 URL:http ://www.google.com:81
但 60 秒后它不会引发超时异常。4 分钟后它会引发net::ERR_TIMED_OUT
我如何设置页面的超时时间?