我想打开一个使用剧作家的网站,但我不想被自动重定向。
在其他一些web客户端中,它们有参数链接follow=False来自动禁用重定向。但我在剧作家身上找不到。
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(),但我仍然没有得到我的案例的答案。
谢谢你的帮助。
发布于 2022-12-02 11:30:20
您可以使用wait_for_event方法等待发出response事件,然后检查响应状态以确定它是否是重定向。如果响应是重定向,则可以通过调用abort对象上的response方法来防止剧作家自动跟踪重定向。
下面是如何修改代码以防止剧作家自动重定向的示例:
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函数将通过重定向响应被调用,允许您根据需要处理重定向。
https://stackoverflow.com/questions/71407454
复制相似问题