Код: Выделить всё
names_to_find
Когда Я использую :has-text() или :text() и получаю неправильные совпадения, поскольку некоторые элементы HTML содержат дополнительный текст вокруг имени. Я не могу использовать :text-is(), потому что он чувствителен к регистру. Итак, я подумал, что :text-matches("regex", "i") будет идеальным, но он не возвращает никаких результатов.
Ниже приведена упрощенная версия. моего кода:
Код: Выделить всё
import re
from playwright.async_api import async_playwright
names_to_find = ['almería', 'cádiz']
async def fetch_geojson(page, names_to_find):
results = {}
while names_to_find:
for name in names_to_find[:]:
# Pattern for exact word boundary, case-insensitive
pattern = rf"\b{re.escape(name)}\b"
name_found = page.locator(f'td[data-label="nameunit"]:text-matches("{pattern}", "i")').first
if await name_found.count() > 0:
print(f"{name} found!")
# Example placeholder for data storage
results[name] = "GeoJSON_data_placeholder"
names_to_find.remove(name)
await page.goto("https://example.com") # Reset for the next iteration
return results
async def main():
async with async_playwright() as p:
browser = await p.chromium.launch()
page = await browser.new_page()
geojson_results = await fetch_geojson(page, names_to_find)
await browser.close()
Когда я запускаю этот код, :text-matches() не возвращает результат. никаких результатов, даже если я ожидаю, что он будет соответствовать именам (без учета регистра и с точными границами слов).
Как я могу настроить код для получения правильных совпадений, или есть ли лучший способ подход для выполнения сопоставления регулярных выражений без учета регистра для текста в Playwright?
Заранее спасибо!
Подробнее здесь: https://stackoverflow.com/questions/791 ... x-for-matc