веб-скребок с помощью pippetter, но сайт блокирует меня

#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