POST
请求。像这样的事情应该有效:
function* getNextPage(url) {
let response = UrlFetchApp.fetch(url);
let cookie = response.getAllHeaders()['Set-Cookie'].map( c => c.split(';')[0]).join(';');
let html = response.getContentText();
yield html;
while (html.includes('pgCtrlDetailedSearch$nextLB')) {
let inputs = Array.from(html.matchAll(/id="(\S+)" value="(\S+)"/g), a => a.slice(1));
let data = {
'__EVENTTARGET': 'pgCtrlDetailedSearch$nextLB',
'__EVENTARGUMENT': '',
...Object.fromEntries(inputs),
}
let options = {
method: 'post',
headers: {cookie},
payload: data,
};
html = UrlFetchApp.fetch(url, options).getContentText();
yield html;
}
}
function main() {
const pageUrl = 'https://notices.philgeps.gov.ph/GEPSNONPILOT/Tender/SplashOpportunitiesSearchUI.aspx?menuIndex=3&BusCatID=53&type=category&ClickFrom=OpenOpp'
let paginator = getNextPage(pageUrl);
let baseUrl = 'https://notices.philgeps.gov.ph/GEPSNONPILOT/Tender';
for (let page of paginator) {
let matches = page.matchAll(/id="dgSearchResult_\w+" href="([^"]+)"/g);
let links = Array.from(matches, arr => `${baseUrl}/${arr[1].replaceAll('&', '&')}`)
console.log(links)
}
}
getNextPage
是伴侣函数。 (一次产生一页)