Драматург перехватывает Facebook Ads GraphQL только после прокрутки (пропускаются первые 15–20 объявлений)Python

Программы на Python
Ответить
Anonymous
 Драматург перехватывает Facebook Ads GraphQL только после прокрутки (пропускаются первые 15–20 объявлений)

Сообщение Anonymous »

Я очищаю библиотеку рекламы Facebook с помощью Playwright (Python) и перехватываю
ответы GraphQL через page.on("response").
Проблема в том, что мой перехватчик НЕ захватывает рекламу с начала
страницы. Он начинает захватывать рекламу только после прокрутки, обычно
с 15 по 20-е объявление.
Я ожидаю, что будет захвачена первая партия объявлений (видимая при начальной загрузке страницы),
но они отсутствуют.
async def process_main_search_scrolling(url):
async with async_playwright() as p:
browser = await p.chromium.launch(headless=True)
context = await browser.new_context(locale="en-US")
page = await context.new_page()

packet_count = [0]

page.on("response", lambda r: handle_response_feed(r, packet_count))
await page.route("**/*", aggressive_block)

await page.goto(url, wait_until="domcontentloaded")
await asyncio.sleep(2)

# Accept cookies
try:
btn = page.locator("button").filter(has_text="Accept").first
if await btn.is_visible():
await btn.click()
except:
pass

# Try to force feed initialization
await page.keyboard.press("PageDown")
await asyncio.sleep(0.5)
await page.keyboard.press("Home")

# Wait for first GraphQL packet
for _ in range(40):
if packet_count[0] > 0:
break
await asyncio.sleep(0.5)

# Scroll
for _ in range(5):
await page.keyboard.press("PageDown")
await asyncio.sleep(3)

await browser.close()
async def handle_response_feed(response, temp_filename, packet_count_ref):
if "graphql" not in response.url and "/api/" not in response.url:
return

try:
payload = await response.json()
text = json.dumps(payload, ensure_ascii=False)

if "ad_archive_id" in text or "adArchiveID" in text:
packet_count_ref[0] += 1
with open(temp_filename, "a", encoding="utf-8") as f:
f.write(text + "\n")

except:
pass


Подробнее здесь: https://stackoverflow.com/questions/798 ... ng-first-1
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»