#google-cloud-platform #discord #google-compute-engine #python-asyncio #aiohttp
# #google-облачная платформа #Discord #google-compute-engine #python-asyncio #aiohttp
Вопрос:
Итак, я пытаюсь создать бота discord, который проверяет веб-сайт и отправляет сообщение, если цена товара падает ниже определенной цены. Я запустил его на своем локальном компьютере, поэтому решил разместить его на Google Compute Engine, чтобы он мог работать 24/7, но столкнулся с некоторыми проблемами.
После долгих тестов я определил, что это связано с тем, что Google Compute Engine не нравится делать запросы aiohttp GET. Ниже приведена изолированная часть моего кода, которая вызывает проблемы в Google Compute Engine, но отлично работает на моем локальном компьютере.
import asyncio
from bs4 import BeautifulSoup
import aiohttp
async def myDriver():
await httpReq()
async def httpReq():
async with aiohttp.ClientSession() as session:
async with session.get("https://www.newegg.com/p/N82E16824569005?Item=N82E16824569005amp;cm_sp=Homepage_BS-_-P1_24-569-005-_-12062020") as page:
pageContent = await page.text()
content = BeautifulSoup(pageContent, 'lxml')
price = content.find("li", {"class": "price-current"}).strong.text.replace(",", "")
print(price)
asyncio.run(myDriver())
Ошибка:
File "GCEtestAiohttp.py", line 19, in httpReq
price = content.find("li", {"class": "price-current"}).strong.text.replace(",", "") AttributeError: 'NoneType' object has no attribute 'strong'
Примечания:
- «Debian GNU / Linux 10 (buster)»
- python 3.7.3
- aiohttp 3.6.3
- Я пробовал аналогичный код с обычной библиотекой запросов в Google Compute Engine, и все работает нормально, поэтому я действительно считаю, что это проблема с использованием запросов aiohttp.
Комментарии:
1. Что содержится
content
во время выполнения поиска?2. Ах, я вижу, это recaptcha. <!DOCTYPE html> <html lang=»en» xmlns=» w3.org/1999/xhtml «> <заголовок> <заголовок> Вы человек? </title> . . . grecaptcha.ready(функция () Знаете ли вы, есть ли способ обойти это, и по какой причине я сталкиваюсь с recaptcha через aiohttp, а не с запросами?
3. Возможно, это невозможно. Помните, что идея recaptcha и других подобных проверок может заключаться в том, чтобы предотвратить именно то, что вы пытаетесь сделать. Такое ощущение, что вы работаете над «роботом», который сканирует веб-страницы, и когда я когда-либо вижу recaptcha, название истории — доказать, что «вы не робот».
4. Кроме того, я бы рекомендовал вам проверить пользовательский агент, который вы используете для отправки этого запроса. Но да, как указано в комментарии выше, веб-сайты, защищенные recaptcha, пытаются избегать именно таких действий (автоматические действия)
5. Отлично, спасибо за советы, люди. Я просто подумал, что это странно, потому что я мог делать это с запросами просто отлично, но у меня были проблемы с aiohttp.