У меня есть случай, когда кукловод щелкает ссылку, которая вызывает загрузку, и в течение 2-3 секунд появляется новая вкладка, и файл загружается, и новая вкладка исчезает. В моем коде мне также нужно переключаться между окнами. но мой код ниже работает только тогда, когда загрузка вызывается из той же вкладки / окна.
async function main() {
const browser = await puppeteer.launch({ headless: false });
const page = await browser.newPage();
await page.setViewport({ width: 1366, height: 800 });
await page.goto(endpoint, { waitUntil: "networkidle2", timeout: 0 });
await page.waitFor(3000);
await page.type("#username", login);
await page.type("#password", pass);
// click and wait for navigation
await page.click("#login"),
await page.waitForNavigation({ waitUntil: "networkidle2" });
await page.waitFor(2000);
const client = await page.target().createCDPSession();
await client.send("Page.setDownloadBehavior", {
behavior: "allow",
downloadPath: path.resolve(__dirname, "reports/asd")
});
await page.waitForXPath('//*[@id="ctl00_ctl00_masterMain_cphMain_repViewable_ctl01_thisItemLink"]');
const [setting] = await page.$x('//*[@id="ctl00_ctl00_masterMain_cphMain_repViewable_ctl01_thisItemLink"]');
if (setting) setting.click();
await page.waitFor(3000);
let pages = await browser.pages();
await page.waitFor(2000);
await pages[2].waitForXPath('/html/body/table/tbody/tr[17]/td[6]/a');
const [newVID] = await pages[2].$x('/html/body/table/tbody/tr[17]/td[6]/a');
if (newVID) newVID.click();
await pages[2].waitFor(3000)
await pages[2].close()
await pages[2].waitFor(5000)
await pages[2].waitForXPath('//*[@id="freeze"]/table/tbody/tr[2]/td/table/tbody/tr[3]/td/a');
const [neww] = await pages[2].$x('//*[@id="freeze"]/table/tbody/tr[2]/td/table/tbody/tr[3]/td/a');
if (neww) neww.click();
await pages[2].waitFor(4000)
await pages[2].waitFor(4000)
await pages[2].waitForXPath('/html/body/div/table/tbody/tr[3]/td/a');
const [fin] = await pages[2].$x('/html/body/div/table/tbody/tr[3]/td/a');
if (fin) fin.click();
}
main()