首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何设置剧作家不自动跟随重定向?

如何设置剧作家不自动跟随重定向?
EN

Stack Overflow用户
提问于 2022-03-09 09:57:54
回答 1查看 1.8K关注 0票数 5

我想打开一个使用剧作家的网站,但我不想被自动重定向。

在其他一些web客户端中,它们有参数链接follow=False来自动禁用重定向。但我在剧作家身上找不到。

代码语言:javascript
复制
async def run(playwright):
    chromium = playwright.chromium
    browser = await chromium.launch()
    context = await browser.new_context()
    page = await context.new_page()

    def handle_response(response):
        print(f'status: {response.status} {response.url}')
    page.on('response', handle_response)

    await page.goto("https://google.com")
    await browser.close()

这就是示例代码,因为我们知道google.com将响应301,并将被重定向到www.google.com。是否有可能在我得到301之后停止这个进程,所以我不需要继续处理www.google.com和之后的所有响应?

请求文件中,我得到了当/如果收到请求的响应状态和头时发出的Page.on('response')

但是,如何在页面启动(“响应”)回调后停止请求?我看到了一些类似的问题,使用Route.abort()或Route.fulfill(),但我仍然没有得到我的案例的答案。

谢谢你的帮助。

EN

回答 1

Stack Overflow用户

发布于 2022-12-02 11:30:20

您可以使用wait_for_event方法等待发出response事件,然后检查响应状态以确定它是否是重定向。如果响应是重定向,则可以通过调用abort对象上的response方法来防止剧作家自动跟踪重定向。

下面是如何修改代码以防止剧作家自动重定向的示例:

代码语言:javascript
复制
async def run(playwright):
    chromium = playwright.chromium
    browser = await chromium.launch()
    context = await browser.new_context()
    page = await context.new_page()

    def handle_response(response):
        print(f'status: {response.status} {response.url}')
        if response.status >= 300 and response.status < 400: response.abort()
    page.on('response', handle_response)

    await page.wait_for_event('response')
    await page.goto("https://google.com")
    await browser.close()

在本例中,handle_response函数检查响应状态以查看它是否是重定向。如果是重定向,则在abort对象上调用response方法,以防止剧作家自动跟踪重定向。wait_for_event方法还用于在调用页面上的goto方法之前等待发出response事件。

这样,剧作家将不会自动遵循重定向,handle_response函数将通过重定向响应被调用,允许您根据需要处理重定向。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71407454

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档