Щелчок по элементу 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 и ждал веб-драйвера. ожидая, что код сможет найти элемент, но он все еще борется. веб-сайт меняет «название игры» каждый день, поэтому я могу использовать только частичную ссылку «игра», которая есть в каждом названии игры, но не полную ссылку.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
53
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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')]

Другие вопросы по теме