Python Selenium 点击加载更多 table

Python Selenium click load more on table

我正在尝试获取 this table 的全部数据。但是,在最后一行中有“加载更多”table 行,我不知道如何加载。到目前为止,我已经尝试了不同的方法,但都没有用,

  1. 我试图通过这个点击行本身:
from selenium import webdriver
driver = webdriver.Chrome()
driver.get(url)
soup = BeautifulSoup(driver.page_source, 'html.parser')

table = soup.find('table', {"class": "competition-leaderboard__table"})

i = 0
for team in table.find.all('tbody'):
    rows = team.find_all('tr')
    for row in rows:
        i = i + 1
        if (i == 51):
            row.click()

        //the scraping code for the first 50 elements
        

上面的代码抛出一个错误,指出“'NoneType' 对象不可调用”。

另一件我试过但没有用的东西是: 我试图通过它的class加载更多table行并点击它。

from selenium import webdriver
driver = webdriver.Chrome()
driver.get(url)

load_more = driver.find_element_by_class_name('competition-leaderboard__load-more-wrapper')
load_more.click()

soup = BeautifulSoup(driver.page_source, 'html.parser')

上面的代码也不起作用。

所以我的问题是如何让 python 单击“加载更多”table 行,就像在 site 的 HTML 结构中一样“加载更多”不是可点击的按钮。

在您的代码中,您必须先接受 cookie,然后才能单击 'Load more' 按钮。

CSS 选择器最适合这种情况。

import time

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

driver = webdriver.Chrome(executable_path='/snap/bin/chromium.chromedriver')
driver.implicitly_wait(10)
driver.get('https://www.kaggle.com/c/coleridgeinitiative-show-us-the-data/leaderboard')

wait = WebDriverWait(driver, 30)
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".sc-pAyMl.dwWbEz .sc-AxiKw.kOAUSS>.sc-AxhCb.gsXzyw")))
cookies = driver.find_element_by_css_selector(".sc-pAyMl.dwWbEz .sc-AxiKw.kOAUSS>.sc-AxhCb.gsXzyw").click()
load_more = driver.find_element_by_css_selector(".competition-leaderboard__load-more-count").click()
time.sleep(10)  # Added for you to make sure that both buttons were clicked
driver.close()
driver.quit()

我测试了这段代码,它点击了所需的按钮。 请注意,我添加了 WebDriverWait 以等待第一个按钮可点击。

更新: 我添加了 time.sleep(10) 这样您就可以看到两个按钮都被单击了。