Estoy tratando de automatizar el casino bet365, sé que tienen herramientas para bloquear bots.
enlace: https://casino.bet365.com/Play/LiveRoulette
No puedo manejar nada que esté dentro de div class="app-container", al menos por selenio. Pero encuentro estos elementos usando JavaScript en la consola del navegador.
import undetected_chromedriver as UChrome from webdriver_manager.chrome import ChromeDriverManager UChrome.install(ChromeDriverManager().install()) from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.common.by import By driver = UChrome.Chrome() driver.get('https://www.bet365.com/#/HO/')después de iniciar sesión
driver.get('https://casino.bet365.com/Play/LiveRoulette') locator = (By.XPATH,'//*[contains(@class, "second-dozen")]')Intento, probablemente, los selectores deberían ser un poco diferentes.
driver.execute_script('return document.getElementsByClassName("roulette-table-cell roulette-table-cell_side-first-dozen roulette-table-cell_group-dozen")[0].getBoundingClientRect()')Probar
driver.find_element(locator[0], locator[1])pero recibo esto: aumentar la clase de excepción (mensaje, pantalla, seguimiento de pila) selenium.common.exceptions.NoSuchElementException: Mensaje: no existe tal elemento: No se puede ubicar el elemento: {"método":"xpath","selector":"(// *[contiene(texto(), "PAR")])[1]"} (Información de la sesión: chrome=96.0.4664.110) Stacktrace: 0 0x55f8fa1bcee3
1 0x55f8f9c8a608
2 0x55f8f9cc0aa1
Probablemente te estés perdiendo un retraso/espera.
Redirigiendo a la página interior con
driver.get('https://casino.bet365.com/Play/LiveRoulette') Lleva algún tiempo hacer que todos los elementos se carguen allí, no puede acceder a los elementos de inmediato.
La forma recomendada de hacerlo es utilizar las esperas explícitas de Condiciones esperadas, algo como esto:
import undetected_chromedriver as UChrome from webdriver_manager.chrome import ChromeDriverManager UChrome.install(ChromeDriverManager().install()) from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.common.by import By driver = UChrome.Chrome() wait = WebDriverWait(driver, 20) driver.get('https://www.bet365.com/#/HO/') #perform the login here driver.get('https://casino.bet365.com/Play/LiveRoulette') locator = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, '//*[contains(@class, "second-dozen")]'))) Veo que básicamente también te falta el método driver.find_element .
Este:
(By.XPATH,'//*[contains(@class, "second-dozen")]') no devolverá un elemento web.
También asegúrese de que el elemento no esté dentro del iframe.