【问题标题】:Why doesn't an element appear even after waiting for the element to load in Selenium?为什么在 Selenium 中等待元素加载后元素没有出现?
【发布时间】:2021-10-19 18:46:45
【问题描述】:

我有一个要抓取的特定 URL,但是,在页面完全加载之前,某个元素不会加载,我无法让 Selenium 找到它:

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

driver = webdriver.Chrome(Insert Driver Path Here)
game_url = "https://rbsdm.com/stats/box_scores/?_inputs_&type=%22reg%22&away=%22ARI%22&home=%22SF%22&year=2020"
driver.get(game_url)
element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CLASS_NAME, "table table-striped table-hover table-responsive"))
    )
print(element)

拥有我想要的表的<div> 的ID 为qbs,它会加载,但是,显然在初始加载时它不包含任何内容。该表具有我在创建 element 变量时使用的类名。

页面的数据肯定是在我给它的 10 秒窗口之后加载的,所以我很困惑这不起作用。

【问题讨论】:

    标签: python selenium google-chrome web-scraping beautifulsoup


    【解决方案1】:

    在您的代码中,当您搜索所需的 HTML 元素时:

    element = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.CLASS_NAME, "table table-striped table-hover table-responsive"))
        )
    

    您正在寻找一个类名,但table table-striped table-hover table-responsive 不是类名,它是一个 CSS 选择器(用点 . 链接空格):

    table.table-striped.table-hover.table-responsive
    

    所以,要么你使用上面的 CSS 选择器(注意 By.CSS_SELECTOR):

    element = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.CSS_SELECTOR, "table.table-striped.table-hover.table-responsive"))
        )
    

    或者使用类名:

    element = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.CLASS_NAME, "table"))
        )
    

    这是一个完整的工作示例:

    from selenium import webdriver
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    
    
    driver = webdriver.Chrome()
    game_url = "https://rbsdm.com/stats/box_scores/?_inputs_&type=%22reg%22&away=%22ARI%22&home=%22SF%22&year=2020"
    driver.get(game_url)
    element = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.CLASS_NAME, "table"))
        )
    print(element.text)
    

    输出:

    Player Plays EPA/play Total EPA aDoT CMP% xCMP% CPOE xQBR
    K.Murray 54 0.18 9.9 5.2 70.3 72.5 -2.2 63.6
    J.Garoppolo 38 0.1 3.6 7 59.4 65.6 -6.2 54.9
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-05
      • 1970-01-01
      • 2019-05-31
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 2013-08-14
      相关资源
      最近更新 更多