Исправление асинхронного кода
Я знаю что selenium не поддерживает асинхронность и перехожу в arsenic (асинхронный аналог selenium). И если в selenium код работает отлично, то в arsenic код как и полагается кликает на accept, но дальше не работает. В чем проблема? Вот, собственно, и сам асинхронный код:
import asyncio
from arsenic import get_session, browsers, services
async def flashscore():
service = services.Chromedriver(binary="./chromedriver.exe")
browser = browsers.Chrome()
async with get_session(service, browser) as session:
await session.get("https://www.flashscore.com")
accept = await session.wait_for_element(2, "#onetrust-accept-btn-handler")
await accept.click()
await asyncio.sleep(10)
i = 0
countries_clicker = await session.wait_for_element(5, ".lmc__block")
for country in countries_clicker:
count = len(countries_clicker)
if country.is_displayed():
await country.click()
i +=1
print(f"Количество итераций: {i}/{count}")
def main():
loop = asyncio.get_event_loop()
loop.run_until_complete(flashscore())
if __name__ == '__main__':
main()
Синхронный код, который работает отлично:
from selenium import webdriver
import time
def flashscore():
driver = webdriver.Chrome()
driver.get("https://www.flashscore.com")
accept = driver.find_element_by_css_selector("#onetrust-accept-btn-handler").click()
time.sleep(10)
i = 0
countries_clicker = driver.find_elements_by_css_selector(".lmc__block")
for country in countries_clicker:
count = len(countries_clicker)
if country.is_displayed():
country.click()
i +=1
print(f"Количество итераций: {i}/{count}")
driver.close()
flashscore()