Щелчок по элементу Href с селеном

Код пытается щелкнуть элемент href в Python Selenium, но терпит неудачу. Вот код.

#provides access to the webdriver
from selenium import webdriver
#allows interraction with elements of the webpage
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support.ui import WebDriverWait
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import TimeoutException

import time

#initilize a webdriver object
driver = webdriver.Chrome()
driver.get("https://www.dynamic-example.com/ab/search/fun")

   # click on game title
    game_title4 = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.XPATH, '//h3[contains(@class,"game-title")]//a[contains(@href,"/games/")]/span')))
    # added a loop to scroll down and up until the element is located
    while not games_title4.is_displayed():
        driver.execute_script("window.scrollBy(0, 100);")
        game_title4 = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.CSS_SELECTOR, '//h3[contains(@class,"game-title")]//a[contains(@href,"/game/")]/span')))
    # wait for the element to become clickable
        game_title4 = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, '//h3[contains(@class,"games-title")]//a[contains(@href,"/games/")]/span')))
    # click on the element using execute_script
        driver.execute_script("arguments[0].click();", games_title4)

и вот элемент, на который он пытается нажать <div class = "game-tile-badges d-flex mb-10 is-empty" data-test = "gameTileBadges"><!----> <!----> <!----></div><h3 class = "my-0 p-sm-right game-tile-title"><a href = "/games/fun-clicking-activity_~0138709d12bc7bb5ad/">Fun Clicking Game“Fun activity”</a></h3>

Я пробовал щелкнуть с помощью python и java, я также пробовал ccs и xpath и ждал веб-драйвера. ожидая, что код сможет найти элемент, но он все еще борется. веб-сайт меняет «название игры» каждый день, поэтому я могу использовать только частичную ссылку «игра», которая есть в каждом названии игры, но не полную ссылку.


53
2

Ответы:

У вас есть XPath, дважды отмеченный как селектор CSS в вашем коде:

By.CSS_SELECTOR, '//h3[contains(@class,"game-title")]//a[contains(@href,"/game/")]/span')))

Это XPath, поэтому:

By.XPATH, '//h3[contains(@class,"game-title")]//a[contains(@href,"/game/")]/span')))

Решено

Я не могу получить доступ к этому URL-адресу с моей машины. Ответ на основе предоставленной HTML-разметки.

Если это элемент HTML:

<h3 class = "my-0 p-sm-right game-tile-title">
  <a href = "/games/fun-clicking-activity_~0138709d12bc7bb5ad/">Fun Clicking Game“Fun activity”</a>
</h3>

Созданные вами выражения XPATH никогда не будут работать. Если вы внимательно посмотрите, значение атрибута @class содержит game-tile-title, а не game-title. Кроме того, я не вижу ни одного узла span. Таким образом, выражение XPATH на основе предоставленного HTML должно быть:

//h3[contains(@class,'game-tile-title')]//a[contains(@href,'games')]