#python #selenium #selenium-webdriver #selenium-chromedriver
#python #селен #selenium-webdriver #selenium-chromedriver
Вопрос:
Я пытаюсь получить список игр на
https://www.xbox.com/en-US/live/gold#gameswithgold
Согласно консоли разработчика Firefox, кажется, что я нашел правильный класс:https://i.imgur.com/M6EpVDg.png
На самом деле, поскольку есть 3 игры, я должен получить список из 3 объектов с помощью этого кода:https://pastebin.com/raw/PEDifvdX (ожидание, чтобы Seleium мог загрузить страницу)
Но на самом деле Селен говорит, что он не существует:https://i.imgur.com/DqsIdk9.png
Я не понимаю, что я делаю неправильно. Я даже пробовал CSS-селекторы, подобные этому
listOfGames = driver.find_element_by_css_selector("section.m-product-placement-item f-size-medium context-game gameDiv")
По-прежнему ничего. Что я делаю не так?
Ответ №1:
Вы пытаетесь получить три разные игры, поэтому вам нужно указать другой путь к элементу или вы можете использовать какой-то цикл, подобный этому
i = 1
while i < 4:
link = f"//*[@id='ContentBlockList_11']/div[2]/section[{i}]/a/div/h3"
listGames = str(driver.find_element_by_xpath(link).text)
print(listGames)
i = 1
вы можете использовать этот цикл в некоторых местах, где есть небольшие различия в xpath, css или class
таким образом, он будет перебирать веб-элементы один за другим и получать список игр
поскольку вы пытаетесь получить имя, я думаю, вам нужно поставить .text
, которое даст вам только имя, и ничего больше
Ответ №2:
Другой вариант с селектором, который не зацикливается и не изменяется — также тот, который меньше зависит от структуры страницы и немного легче читается:
//a[starts-with(@data-loc-link,'keyLinknowgame')]//h3
Вот пример кода:
from selenium import webdriver
from selenium.common.exceptions import StaleElementReferenceException
driver = webdriver.Chrome()
url = f"https://www.xbox.com/en-US/live/gold#gameswithgold"
driver.get(url)
driver.implicitly_wait(10)
listOfGames = driver.find_elements_by_xpath("//a[starts-with(@data-loc-link,'keyLinknowgame')]//h3")
for game in listOfGames:
try:
print(game.text)
except StaleElementReferenceException:
pass
Если вам нужно больше, чем просто заголовок, удалите выделение //h3:
//a[starts-with(@data-loc-link,'keyLinknowgame')]
И добавьте любой дополнительный Xpath, который вы хотите, чтобы сузить круг поиска до содержимого / элементов, которые вам нужны.