Changes: - Early detection for "no reviews" messages in 11 languages - Checks for disabled reviews tabs and 0-review indicators - Returns early (saves 30-40s) when no reviews exist - Frontend hides analytics/export buttons when reviews_count = 0 - Structural pattern matching improvements (work in progress) Known issue: - Lithuanian hospital page has different structure (no tabs found) - Needs separate investigation - may use different Google Maps layout Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
93 lines
2.8 KiB
Python
93 lines
2.8 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Test WITHOUT forcing English locale - use the page's default language.
|
|
"""
|
|
|
|
import time
|
|
from seleniumbase import Driver
|
|
|
|
# NO hl=en parameter!
|
|
url = "https://www.google.com/maps/search/?api=1&query=panevezio%20respubliikine%20ligonine"
|
|
|
|
driver = Driver(uc=True, headless=False)
|
|
|
|
try:
|
|
driver.get(url)
|
|
print(f"Loaded (NO hl=en): {url}")
|
|
time.sleep(5)
|
|
|
|
# GDPR
|
|
try:
|
|
form_btns = driver.find_elements('css selector', 'form button')
|
|
for btn in form_btns:
|
|
btn_text = (btn.text or '').lower()
|
|
if 'accept' in btn_text or 'priim' in btn_text: # Lithuanian "priimti"
|
|
print(f"Clicking consent: {btn.text}")
|
|
btn.click()
|
|
time.sleep(2)
|
|
break
|
|
except:
|
|
pass
|
|
|
|
# List ALL tabs
|
|
print("\nALL TABS FOUND:")
|
|
time.sleep(2)
|
|
tabs = driver.find_elements('css selector', 'button[role="tab"]')
|
|
for i, tab in enumerate(tabs, 1):
|
|
text = tab.text or ''
|
|
aria = tab.get_attribute('aria-label') or ''
|
|
print(f" Tab {i}: text='{text}', aria='{aria}'")
|
|
|
|
# Look for reviews tab (try multiple keywords)
|
|
review_keywords = ['review', 'reseña', 'atsiliepimai', 'atsiliepi', 'отзыв']
|
|
review_tab_found = False
|
|
|
|
for tab in tabs:
|
|
text = (tab.text or '').lower()
|
|
aria = (tab.get_attribute('aria-label') or '').lower()
|
|
|
|
for keyword in review_keywords:
|
|
if keyword in text or keyword in aria:
|
|
print(f"\nFound REVIEWS TAB: {tab.text or aria[:50]}")
|
|
driver.execute_script("arguments[0].click();", tab)
|
|
time.sleep(5)
|
|
review_tab_found = True
|
|
break
|
|
|
|
if review_tab_found:
|
|
break
|
|
|
|
if not review_tab_found:
|
|
print("\nWARNING: Still no reviews tab found!")
|
|
else:
|
|
# Now scroll and check for reviews
|
|
print("\nScrolling to load reviews...")
|
|
try:
|
|
pane = driver.find_element('css selector', 'div.m6QErb.WNBkOb.XiKgde')
|
|
for i in range(10):
|
|
driver.execute_script("arguments[0].scrollBy(0, 400);", pane)
|
|
time.sleep(0.3)
|
|
except:
|
|
pass
|
|
|
|
# Check for reviews using known selectors
|
|
selectors_to_check = [
|
|
'div.jftiEf.fontBodyMedium',
|
|
'div.jftiEf',
|
|
'div.fontBodyMedium',
|
|
'div[data-review-id]'
|
|
]
|
|
|
|
print("\nChecking selectors:")
|
|
for selector in selectors_to_check:
|
|
count = driver.execute_script(f"return document.querySelectorAll('{selector}').length;")
|
|
print(f" {selector:30} : {count} elements")
|
|
|
|
print(f"\n{'='*80}")
|
|
print("Browser open for inspection (120s)...")
|
|
print(f"{'='*80}")
|
|
time.sleep(120)
|
|
|
|
finally:
|
|
driver.quit()
|