fix: match CDP target by page url
This commit is contained in:
@@ -195,15 +195,27 @@ export async function getCDPSessionForPage({ page, wsUrl }: { page: Page; wsUrl?
|
|||||||
const { targetInfos } = await cdp.send('Target.getTargets')
|
const { targetInfos } = await cdp.send('Target.getTargets')
|
||||||
const pageTargets = targetInfos.filter((t) => t.type === 'page')
|
const pageTargets = targetInfos.filter((t) => t.type === 'page')
|
||||||
|
|
||||||
if (pageIndex >= pageTargets.length) {
|
const pageUrl = page.url()
|
||||||
|
let target = pageTargets[pageIndex]
|
||||||
|
|
||||||
|
if (!target || target.url !== pageUrl) {
|
||||||
|
const matchingTargets = pageTargets.filter((candidate) => {
|
||||||
|
return candidate.url === pageUrl
|
||||||
|
})
|
||||||
|
if (matchingTargets.length > 0) {
|
||||||
|
const fallbackIndex = pageIndex < matchingTargets.length ? pageIndex : 0
|
||||||
|
target = matchingTargets[fallbackIndex]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!target) {
|
||||||
cdp.close()
|
cdp.close()
|
||||||
throw new Error(`Page index ${pageIndex} out of bounds (${pageTargets.length} targets)`)
|
throw new Error(`Page index ${pageIndex} out of bounds (${pageTargets.length} targets)`)
|
||||||
}
|
}
|
||||||
|
|
||||||
const target = pageTargets[pageIndex]
|
if (target.url !== pageUrl) {
|
||||||
if (target.url !== page.url()) {
|
|
||||||
cdp.close()
|
cdp.close()
|
||||||
throw new Error(`URL mismatch: page has "${page.url()}" but target has "${target.url}"`)
|
throw new Error(`URL mismatch: page has "${pageUrl}" but target has "${target.url}"`)
|
||||||
}
|
}
|
||||||
|
|
||||||
const { sessionId } = await cdp.send('Target.attachToTarget', {
|
const { sessionId } = await cdp.send('Target.attachToTarget', {
|
||||||
|
|||||||
Reference in New Issue
Block a user