Существует ли эффективный способ очистки и настройки страницы?

#node.js #web-scraping #puppeteer #oracle-adf

Вопрос:

Я пытаюсь очистить следующую страницу: https://sia.unal.edu.co/ServiciosApp/facespublico/public/servicioPublico.jsf?taskflowId=task-flow-AC_CatalogoAsignaturas

В настоящее время я использую puppeteer, чтобы найти два значения параметров, которые мне нужны:

 const sessionParams = async () => {
  const browser: Browser = await puppeteer.launch()
  const page: Page = await browser.newPage()
  await page.goto(
    'https://sia.unal.edu.co/ServiciosApp/facespublico/public/servicioPublico.jsf?taskflowId=task-flow-AC_CatalogoAsignaturas',
    { waitUntil: 'domcontentloaded' }
  )

  const params = {
    windowId: await page.$eval('input[name="Adf-Window-Id"]', (input) => {
      return input.getAttribute('value')
    }),
    viewState: await page.$eval('input[name="javax.faces.ViewState"]', (input) => {
      return input.getAttribute('value')
    }),
  }

  await browser.close()
  return params
}
 

Это работает, но мучительно медленно (около 15 секунд).
Использование fetch или аналогичные библиотеки не работают, так как значение этих входных данных будет читаться: winnoloop вместо случайно сгенерированной строки.

Похоже, что страница была сделана с использованием граней ADF.

Что я в конечном итоге хочу, так это иметь возможность отправить этот запрос:

 curl "https://sia.unal.edu.co/ServiciosApp/facespublico/public/servicioPublico.jsf?Adf-Window-Id=w18k7uelfonamp;Adf-Page-Id=0" -X POST -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:92.0) Gecko/20100101 Firefox/92.0" -H "Accept: */*" -H "Accept-Language: en-US,en;q=0.5" --compressed -H "Content-Type: application/x-www-form-urlencoded; charset=UTF-8" -H "Adf-Ads-Page-Id: 1" -H "Adf-Rich-Message: true" -H "Origin: https://sia.unal.edu.co" -H "DNT: 1" -H "Connection: keep-alive" -H "Referer: https://sia.unal.edu.co/ServiciosApp/facespublico/public/servicioPublico.jsf?taskflowId=task-flow-AC_CatalogoAsignaturas" -H "Cookie: ALUMNO_ID=portal2|YVgHF|YVfeG; OAMAuthnCookie_sia.unal.edu.co:443=QnD9HduBUygNYeC8ji173A6UmrNG1UET3DXA5"%"2FedKuQHJXHZqLafbnG37lRmumYlggWxbC"%"2BWE39peBn54rsxgOsMqBVG2pC9"%"2BFxof0c"%"2BzUFBJTaCBLrlTvcl2"%"2BC97CrkuvSFf94ChwtJIXZKgG5tcUe9OYgO6aj11INP8ccb5auLWJQE3nj1wQp0nrgKUC"%"2BH87M1TiTEU7Rtoi3hmKD82p3"%"2FXPtxEmjSTPzzB3M47ExJNsIc6"%"2FhKfpGnGVIpDQmnq9T5T5c"%"2Brptm"%"2FFjaPCE2W8WIDXeI4Y2ECaymlTqBK5p67VZ4edD333QkaGdmIedBEi4kFRzlnqQ7EennU7oSCu3"%"2BJFnRg87EtLiZXz0rcLaKi1"%"2B3arJgcdBcS"%"2FwCwGRCeTR9IhMnWE9Uv"%"2F9mrPreQYwES6KpLWtJMh5FI9JjXkykOr4wrSqsR2HZWiuBOqnY0KOgkJpNYnvUpONN15TmiOthyx"%"2FRNMrdsW5CLfOh4lzpFnhhmh4izwg"%"2BpvLqyNU"%"2BVHalSob0oMUkgD7W3Jpa4xzTM03r7ggtO"%"2FOFUXeCC"%"2Fg"%"3D; PortalJSESSION=pqI_22pLl_RHReoaBuDzV-5NpujqeyD53-5h_kKioezZJAgw0t1w!-1695300558" -H "Sec-Fetch-Dest: empty" -H "Sec-Fetch-Mode: cors" -H "Sec-Fetch-Site: same-origin" --data-raw "pt1:r1:0:soc1=0amp;pt1:r1:0:soc9=6amp;pt1:r1:0:soc2=4amp;pt1:r1:0:soc3=12amp;pt1:r1:0:soc4=amp;pt1:r1:0:soc5=amp;pt1:r1:0:soc10=0amp;pt1:r1:0:it10=amp;pt1:r1:0:it11=amp;org.apache.myfaces.trinidad.faces.FORM=f1amp;Adf-Window-Id=w18k7uelfonamp;Adf-Page-Id=0amp;javax.faces.ViewState=!-um1yuq943amp;event=pt1"%"3Ar1"%"3A0"%"3Acb1amp;event.pt1:r1:0:cb1="%"3Cm xmlns"%"3D"%"22http"%"3A"%"2F"%"2Foracle.com"%"2FrichClient"%"2Fcomm"%"22"%"3E"%"3Ck v"%"3D"%"22type"%"22"%"3E"%"3Cs"%"3Eaction"%"3C"%"2Fs"%"3E"%"3C"%"2Fk"%"3E"%"3C"%"2Fm"%"3Eamp;oracle.adf.view.rich.PROCESS=pt1"%"3Ar1"%"2Cpt1"%"3Ar1"%"3A0"%"3Acb1"
 

Но так Adf-Window-Id как и javax.faces.ViewState «истекает», я не могу использовать одни и те же для всех запросов.

Комментарии:

1. AdfLoopbackUtils.runLoopback похоже Adf-Window-Id , у него есть параметр для анализа, но я нигде не вижу javax.faces.ViewState статики. Тем не менее, { waitUntil: 'domcontentloaded' } это может быть удалено в пользу page.waitForSelector('input[name="javax.faces.ViewState"]') того, что является наиболее жесткой привязкой именно к тем данным, которые вам нужны, и не более того. Хотя, вероятно, это не серьезное ускорение.