python - 从 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()
解决方案
您可以使用此选择器获取游戏标题的文本:
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
推荐阅读
- android - 无法在使用 picasso android studio 的某些手机上加载图像
- c++ - 用于 STL 容器的 std::string_view
- easeljs - 位图缓存作为图像源
- perl - 子程序未返回正确的整数
- html - PrimeNG 切换按钮图标
- bots - 需要 DialogFlow 提示语句中的建议
- ms-access - 在 Access 的组合框中显示带有破折号的社会保险号
- vue.js - 如何在插槽中定义一个组件,该组件作为子组件中定义的道具
- angular - 如何使用角度谷歌地图显示多个标记 - 角度 6
- angular - ng2-ckeditor 中的自定义函数