我编写了一个简单的程序,只记录请求和响应,一次是Python中的Pypetteer,一次是JavaScript中的Puppeter。 以下是JS代码:
const puppeteer = require('puppeteer');
const url = 'https://www.twitch.tv/';
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.setRequestInterception(true);
page.on('request', request => {
console.log("REQUEST: " + request.url());
request.continue();
});
page.on('response', response => {
console.log("RESPONSE: " + response.url());
});
await page.goto(url, {waitUntil: ["networkidle0", "domcontentloaded"]});
await browser.close();
})();
下面是Python代码:
import asyncio
from pyppeteer import launch
url = "https://www.twitch.tv/"
async def handle_request(request):
print("REQUEST: ", request.url)
await request.continue_()
async def handle_response(response):
print("RESPONSE: ", response.url)
async def main():
browser = await launch()
page = await browser.newPage()
await page.setRequestInterception(True)
page.on('response', handle_response)
page.on('request', handle_request)
await page.goto(url, waitUntil=["networkidle0", "domcontentloaded"])
await browser.close()
asyncio.get_event_loop().run_until_complete(main())
然后,我使用以下方法比较它们的输出:
> python3 script.py | grep "wasm"
REQUEST: https://static.twitchcdn.net/assets/wasmworker.min-[redacted].js
REQUEST: https://static.twitchcdn.net/assets/wasmworker.min-[redacted].wasm
> node script.js | grep "wasm"
(nothing)
我的问题是:
(1)为什么我会得到不同的结果?木偶演员和Pypetteer不应该在背景中使用完全相同的浏览器,并且(希望)使用相同的默认设置(例如视口…等等)?
(2) 尽管Python版本工作得更好(对于我的用例来说,主观上更好),但在记录请求时,为什么不记录相应的响应呢?当在非headless模式下运行时,在开发者控制台中,两个请求都会显示响应代码200。是什么导致Pypetteer不记录响应
我尝试使用不同的视口大小并启用/禁用缓存,但没有效果
编辑:好的,(1)的原因似乎是Pypetteer已经过时了。关于(2):twitch.tv不提供我在与Puppeter一起运行时搜索的文件(流也不工作);尽管我将Puppeter设置为使用与手动访问页面时相同的chrome可执行文件和UserAgent字符串,但它仍然可以工作。我认为这可能与Puppeter禁用扩展有关,因为调试控制台显示了来自chrome cast扩展的cast_sender.js
的一些错误,但甚至在Puppeter加载感兴趣的文件时使用确切的saame参数启动chrome
别忘了lambda它会生成页面。在上调用任何你想要的函数
相关问题 更多 >
编程相关推荐