如何解决Python Selenium 单击在表上加载更多
我正在尝试获取 this 表的全部数据。但是,在最后一行中有我不知道如何加载的“加载更多”表行。到目前为止,我尝试了不同的方法,但都行不通,
- 我试图通过这个点击行本身:
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'对象不可调用”。
我尝试过但不起作用的另一件事如下: 我试图通过它的类加载更多表格行并点击它。
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 单击“加载更多”表格行,就像在 site 的 HTML 结构中一样,“加载更多”似乎不是一个可点击的按钮。>
解决方法
在您的代码中,您必须先接受 cookie,然后才能单击“加载更多”按钮。
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) 这样你就可以看到两个按钮都被点击了。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。