【问题标题】:Filtering returned information from selenium从 selenium 过滤返回的信息
【发布时间】:2021-09-08 10:14:49
【问题描述】:

我正在尝试使用 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()

【问题讨论】:

  • 所以你想收集所有的标题游戏并存储到一个列表中?
  • 正确,我在第 5 行启动了名为 game_titles 的列表

标签: python python-3.x selenium selenium-webdriver web-scraping


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    你可以这样试试:

    from selenium import webdriver
    
    driver = webdriver.Chrome(executable_path="path to chromdriver.exe")
    driver.maximize_window()
    driver.implicitly_wait(10)
    
    driver.get("https://steamcommunity.com/id/Desmoo88/games/?tab=all")
    rows = driver.find_elements_by_class_name("gameListRow") # Collect all rows
    for row in rows:
        name = row.find_element_by_xpath(".//div[contains(@class,'Name')]").text # Collect the Name in that particular row. To find an element within an element use a `.` before `xpath`.
        print(name)
    
    Arma 3
    Garry's Mod
    Counter-Strike: Global Offensive
    ...
    Zeno Clash 2
    ZombieRun
    

    【讨论】:

      猜你喜欢
      • 2020-09-01
      • 1970-01-01
      • 2017-12-22
      • 1970-01-01
      • 2019-07-21
      • 1970-01-01
      • 2019-08-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多