首页 > 解决方案 > 从 selenium 过滤返回的信息

问题描述

我正在尝试使用 selenium 来收集选定用户配置文件中的所有游戏标题,以便我以后可以使用 random.choice 随机选择一个,建议他们使用不和谐机器人来玩它。但是我目前正在寻求的帮助只是将游戏标题打印到控制台,我可以处理 discord.py 集成。

到目前为止,我能够返回整个游戏列表,但它还包括不需要的信息,例如游戏时间和链接。

我想只分离出游戏名称并将每个名称存储在一个列表中,以供以后参考以随机选择一个。

到目前为止,我已经尝试使用 .split('\n') 但是单独的行数会根据返回的信息而有所不同,并且并非所有用户在他们的页面上都有相同数量的标题。

我还尝试使用以下 xpath:

//*[@id="game_107410"]/div[2]/div[1]/div[1]/div

然而,很容易看出这是引用特定的游戏 ID,并且不会在同一页面上返回其他标题。

我当前的代码如下所示。预先感谢您提供有关学习解决此问题的任何建议或方向。

from selenium import webdriver

PATH = 'C:/Program Files (x86)/chromedriver.exe'

game_titles ={}

driver = webdriver.Chrome(PATH)

driver.get('https://steamcommunity.com/id/Desmoo88/games/?tab=all')

game_list= driver.find_element_by_xpath('//*[@id="games_list_rows"]').text

print(game_list)

driver.quit()

标签: pythonpython-3.xseleniumselenium-webdriverweb-scraping

解决方案


您可以使用此选择器获取游戏标题的文本:

div.gameListRowItemName.ellipsis

试试下面的代码:

driver.get('https://steamcommunity.com/id/Desmoo88/games/?tab=all')

game_titles =[]

wait = WebDriverWait(driver, 20)

title_list = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, 'div.gameListRowItemName.ellipsis')))

for title in title_list:
    game_titles.append(title.text)

print(len(game_titles))
print(game_titles)

导入后:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

推荐阅读