Descarga el HTML renderizado de la pagina de Uber Eats McDonalds para una direccion especifica. Usar cuando el usuario pida descargar, scrapear o bajar el HTML de Uber Eats para un numero de direccion (1-20). Lee la direccion automaticamente de /home/jlzdz/direcciones.json.
Copia este script, reemplaza NUMERO con el numero real, y ejecutalo. NO lo modifiques excepto NUMERO:
import json, time
from playwright.sync_api import sync_playwright
N = NUMERO
with open('/home/jlzdz/direcciones.json') as f:
dirs = json.load(f)
addr = dirs[str(N)]['address']
print(f'Direccion {N}: {addr}')
with sync_playwright() as p:
browser = p.chromium.connect_over_cdp('http://127.0.0.1:9222')
context = browser.contexts[0]
page = context.pages[0]
# PASO 1: Navegar a Uber Eats y ESPERAR 14 SEGUNDOS (pagina pesada)
print('Navegando a Uber Eats...')
page.goto('https://www.ubereats.com/mx/feed', timeout=60000)
page.wait_for_timeout(14000)
print('Pagina cargada')
# PASO 2: Clic en el icono de ubicacion en el header
# Esta en el header, entre "Para llevar" y "Ahora", muestra la direccion actual con icono de ubicacion
print('Buscando selector de direccion...')
addr_btn = page.locator('header [data-testid*="location"], header [data-testid*="address"], [data-baseweb*="tag"]').first
if addr_btn.count() == 0:
# Buscar el texto de la direccion o el numero de piso en el header
addr_btn = page.locator('header >> text=/7-8|Av\\.|Avenida|Calle|Calzada/')
if addr_btn.count() == 0:
# Buscar el icono de ubicacion clickeable en el header
addr_btn = page.locator('[data-testid="header-address-wrapper"], [class*="LocationHeader"], header button >> nth=1').first
addr_btn.click()
print('Selector clickeado, esperando modal Detalles de la entrega...')
page.wait_for_timeout(6000)
# PASO 3: Clic en "Cambiar" para abrir el modal de cambio de direccion
print('Buscando boton Cambiar...')
cambiar_btn = page.locator('text="Cambiar"').first
if cambiar_btn.count() > 0:
cambiar_btn.click()
else:
# Intentar con otros selectores
cambiar_btn = page.locator('button:has-text("Cambiar"), a:has-text("Cambiar")').first
cambiar_btn.click()
print('Boton Cambiar clickeado, esperando modal Entregar en...')
page.wait_for_timeout(8000)
# PASO 4: Escribir la direccion en "Ingresa la direccion de entrega"
print('Buscando campo de texto...')
input_field = page.locator('input[placeholder*="Ingresa la direcci"], input[placeholder*="direcci"], input[placeholder*="entrega"], input[type="text"]').first
input_field.click()
page.wait_for_timeout(1000)
input_field.fill('')
page.wait_for_timeout(500)
input_field.type(addr, delay=50)
print(f'Direccion escrita: {addr}')
page.wait_for_timeout(4000)
# PASO 5: Clic en el primer resultado de la lista
print('Buscando sugerencias...')
suggestion = page.locator('[class*="suggestion"], [class*="result"], [class*="option"], [role="option"], [data-testid*="suggestion"], [data-testid*="result"], ul li').first
if suggestion.count() > 0:
suggestion.click()
else:
page.keyboard.press('ArrowDown')
page.wait_for_timeout(500)
page.keyboard.press('Enter')
print('Sugerencia seleccionada')
page.wait_for_timeout(14000)
print('Pagina recargada con nueva direccion')
# PASO 6: Clic en el campo de busqueda "Buscar en Uber Eats" del header
print('Buscando campo de busqueda...')
search_field = page.locator('input[placeholder*="Buscar en Uber"], input[placeholder*="Buscar"], input[aria-label*="Buscar"]').first
if search_field.count() == 0:
# Si no hay input visible, buscar el icono/boton de busqueda
search_btn = page.locator('[data-testid*="search"], header >> text="Buscar en Uber Eats"').first
search_btn.click()
page.wait_for_timeout(2000)
search_field = page.locator('input[placeholder*="Buscar"], input[type="search"], input[type="text"]').first
search_field.click()
page.wait_for_timeout(2000)
print('Campo de busqueda abierto')
# PASO 7: Buscar "big mac" y dar Enter
search_field.fill('')
search_field.type('big mac', delay=80)
print('Busqueda: big mac')
page.wait_for_timeout(1000)
page.keyboard.press('Enter')
page.wait_for_timeout(6000)
print('Resultados cargados')
# PASO 8: Buscar McDonalds en los resultados (puede requerir scroll)
print('Buscando McDonalds en resultados...')
mcdonalds = page.locator('text=/McDonald/i').first
found = False
if mcdonalds.count() > 0:
try:
mcdonalds.scroll_into_view_if_needed()
page.wait_for_timeout(1000)
mcdonalds.click()
found = True
print('McDonalds encontrado y clickeado')
except:
pass
if not found:
# Hacer scroll para buscar McDonalds
for scroll_attempt in range(5):
page.mouse.wheel(0, 800)
page.wait_for_timeout(2000)
mcdonalds = page.locator('text=/McDonald/i').first
if mcdonalds.count() > 0:
try:
mcdonalds.click()
found = True
print(f'McDonalds encontrado despues de {scroll_attempt+1} scrolls')
break
except:
continue
if not found:
# Ultimo intento: buscar en cards o links
links = page.locator('a[href*="mcdonald"], a[href*="McDonald"]')
if links.count() > 0:
links.first.click()
found = True
print('McDonalds encontrado via link')
page.wait_for_timeout(14000)
print('Pagina de McDonalds cargada')
# PASO 9: Screenshot
page.screenshot(path=f'/home/jlzdz/uber_{N}.png')
print(f'Screenshot guardado: uber_{N}.png')
# PASO 10: Guardar HTML
html = page.content()
with open(f'/home/jlzdz/uber_{N}.html', 'w', encoding='utf-8') as f:
f.write(html)
print(f'HTML guardado: uber_{N}.html ({len(html)//1024} KB)')
print('Completado!')