Я использую "puppeteer": "^1.16.0",
, чтобы проверить, может ли мой веб-сайт противостоять прокси.
Я разработал короткий сценарий кукловода, который проходит через ряд прокси, и ответ моего сайта должен быть:
Найдите ниже пример сценария:
function shuffle(dataObjArr) {
let res = dataObjArr.sort(() => Math.random() - 0.5);
return res
}
/**
* Create random number between start and end value
* @param {*} start
* @param {*} end
*/
function randomNumberBetween(start, end) {
return Math.floor(Math.random() * end) + start
}
/**
* get 10 proxies from a list
*/
function getProxies() {
// ...
return proxies
}
async function main() {
let issuerUrls = JSON.parse('[{"id":62,"name":"Product 1","ecomUrl":"/product/252","createdAt":"2019-05-25T07:51:49.000Z","updatedAt":"2019-05-25T07:51:49.000Z"}, {"id":15,"name":"Product 2","ecomUrl":"/product/251","createdAt":"2019-05-25T07:51:49.000Z","updatedAt":"2019-05-25T07:51:49.000Z"}, {"id":15,"name":"Product 2","ecomUrl":"/product/251","createdAt":"2019-05-25T07:51:49.000Z","updatedAt":"2019-05-25T07:51:49.000Z"}, {"id":15,"name":"Product 2","ecomUrl":"/product/251","createdAt":"2019-05-25T07:51:49.000Z","updatedAt":"2019-05-25T07:51:49.000Z"}]')
let issuerUrlsShuffled = shuffle(issuerUrls)
let BASE_URL = "https://www.webscraper.io/test-sites/e-commerce/allinone"
let p = await getProxies();
let proxies = [].concat(...p)
let shuffledProxies = shuffle(proxies)
let randNumbBool = true
let i = 0
let randNumb = 0
// for (let i = 0; i < issuerUrlsShuffled.length; i++) {
while (i < issuerUrlsShuffled.length) {
if (randNumbBool) {
randNumb = randomNumberBetween(0, shuffledProxies.length)
}
let proxy = '--proxy-server=' + shuffledProxies[randNumb].ipAddress + ":" + shuffledProxies[randNumb].port
await puppeteer.launch({
headless: false,
args: ["--disable-notifications", proxy] // --proxy-server=127.0.0.1:9876
}).then(async browser => {
const page = await browser.newPage()
await page.setViewport({
width: 800,
height: 600
})
try {
let URL = BASE_URL + issuerUrlsShuffled[i].ecomUrl;
await page.goto(URL)
page.waitForNavigation({
timeout: 0,
waitUntil: 'domcontentloaded'
});
await page.exposeFunction('formatDate', (date) =>
moment(date, 'M/DD/YYYY').toDate()
);
const data = await page.evaluate(async () => {
const priceData = []
let date = "9/23/2016" // this is needed for testing purposes only!!!
priceData.push({
price_date: await window.formatDate(date)
})
return priceData
})
// show data
// should be emtpy!!!
console.log(JSON.stringify(data, null, 2))
await page.waitFor(3000)
await browser.close()
randNumbBool = false
++i // next step in list
} catch (error) {
randNumbBool = true // get another random proxy
console.log(error)
}
})
}
}
main()
Когда мой веб-сайт отправляет вышеуказанное изображение в тест браузера, мой сценарий останавливается и не выполняет дальнейшие прокси для проверки.
Как отловить ошибку ERR_CONNECTION_RESET
и при этом запустить мой скрипт, чтобы завершить тест со всеми доступными прокси.
Спасибо заранее!