#python #web-scraping #puppeteer #pyppeteer
Вопрос:
я пытаюсь очистить веб-страницы, чтобы получить некоторые значения выкупа, применяемые в продукте на сайте, но он продолжает блокировать меня, я уже пытался использовать прокси-сервер с IP-адресом моей страны, менять заголовки, искать какой-то «идентификатор» для доступа, как у некоторых авторов aws, с анонимной страницей и без нее, безголовый true, false и ничего не работает, вот что я пробовал.
args = [
'--start-maximized',
'--disable-extensions',
'--hide-scrollbars',
'--disable-bundled-ppapi-flash',
'--mute-audio',
'--no-sandbox',
'--disable-setuid-sandbox',
'--disable-gpu',
'--proxy-server=' self.PROXY_HOST ':' str(self.PROXY_PORT)
]
#browser = await launch(headless=False, ignoreHTTPSErrors=True, userDataDir='./tmp', options={'args': args})
browser = await launch(headless=False, options={'args': args})
browser_context = await browser.createIncognitoBrowserContext()
page = await browser_context.newPage()
await page.setUserAgent('Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36')
await page.setExtraHTTPHeaders({
"X-Frame-Options": "GOFORIT"
})
await page.setViewport({
'width': 1366,
'height': 768
})
await page.authenticate({'username': self.PROXY_USER, 'password': self.PROXY_PASS})
await page.setRequestInterception(True)
async def intercept(request):
if "origem=PD" in request.url:
await request.continue_({
"headers": {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36',
'Accept' : 'text/html,application/xhtml xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language' : 'en-US,en;q=0.5',
'Accept-Encoding' : 'gzip',
'DNT' : '1',
'Connection' : 'close'
}
})
else:
await request.continue_()
# intercept links
page.on('request', lambda req: asyncio.ensure_future(intercept(req)))
# wait for navigation
await asyncio.wait([page.goto(url, {'waitUntil': 'networkidle2'}), page.waitForNavigation()])
# get content
content = await page.content()
Комментарии:
1. Некоторые веб-сайты обнаруживают селен и кукловод или контролируемые браузеры. Попробуйте использовать протоколы Chrome DevTools , и вы сможете использовать pychrome для отправки команд. У него много ограничений, необходимы дополнительные исследования, но он работал над одним из моих проектов, когда мой бот был заблокирован.
Ответ №1:
Существует несколько параметров браузера, которые могут быть обнаружены сайтом, чтобы определить, автоматизирован браузер или нет. Вы можете проверить свой браузер pippeteer здесь — https://bot.sannysoft.com/
Конечно, его можно обойти 🙂 Для этого есть библиотека — https://github.com/MeiK2333/pyppeteer_stealth