python - 查找方法不提取已经存在的 div 标签
问题描述
我正在尝试抓取此网页
我想从下表中获取内容:
统计表内容存在于内部: div 标签具有“srl-tab srl-tab-handball-playerstats sr-widget sr-widget-level-0 sr-handball-playerstats sr-normal”作为类名
我正在使用以下代码:
from selenium import webdriver
from bs4 import BeautifulSoup
link = "https://www.liquimoly-hbl.de/en/import/games/season-2020-2021/bundesliga/21--gameday--rhein-neckar-loewen---eulen-ludwigshafen/"
driver = webdriver.Chrome("path-to-my-chromedrivers")
driver.get(link)
driver.switch_to.frame("iframe-23400665")
page_source = driver.page_source
driver.close()
soup = BeautifulSoup(page_source, "html5lib")
a = soup.find("div", {"class": "srl-tabs-wrapper srl-flex-child"}).find("div", {"srl-tabs srl-flex"}).find("div", {'class': "srl-tabs-content-wrapper srl-flex-child"}).find("div", {"class": "srl-tabs-content"})
print(a.find("div", {"class": "srl-tab srl-tab-handball-playerstats sr-widget sr-widget-level-0 sr-handball-playerstats sr-normal"}))
打印语句的输出给了我“无”值,因为网站中存在一个具有相同类名的 div 标签我不知道为什么我没有得到所需的输出。
我必须在代码中更改什么?还是我在这里做错了什么?
编辑:
我认为从页面源获取统计表值的唯一方法是首先单击“统计”按钮,然后提取页面源。我不知道如何点击统计按钮,
driver = webdriver.Chrome('path-to-my-chromedrivers')
driver.get(link)
driver.switch_to.frame("iframe-23400665")
page_source = driver.page_source
x = driver.find_elements_by_xpath("//div[@class='srl-tab']")
for i in x:
if i.get_attribute("data-widget") == "handball.playerstats":
print(i.get_attribute("class"))
print(i.get_attribute("data-widget"))
driver.execute_script("arguments[0].click();", i)
print(i.get_attribute("class"))
page_source_2 = driver.page_source
break
driver.close()
输出:-
srl-tab
handball.playerstats
srl-tab selected
我现在可以单击统计按钮(请参阅类srl-tab
更改为srl-tab selected
)
但是仍然没有获得 Player Total 表的运气。
解决方案
转到页面,单击弹出窗口,移至 iframe,单击统计信息并等待。将源代码传递给 Beautifulsoup 并做你想做的事。
driver.get("https://www.liquimoly-hbl.de/en/import/games/season-2020-2021/bundesliga/21--gameday--rhein-neckar-loewen---eulen-ludwigshafen/")
driver.find_element(By.XPATH,"//button[.='ALLE AKZEPTIEREN']").click()
driver.switch_to.frame("iframe-23400665")
driver.find_element(By.XPATH,"//div[.='Statistics']").click()
time.sleep(5)
html=driver.page_source
soup=BeautifulSoup(html,'html.parser')
div=soup.select_one("div.sr-table-content")
print(div)
进口
from selenium.webdriver.common.by import By
from time import sleep
推荐阅读
- cassandra - 我可以将 Apache cassandra 节点添加到 DataStax (DSE) cassandra 集群吗?
- c - 有没有一种方法可以生成随机方阵,直到有一个对称方阵?(C)
- powerbi - 计算测量 PowerBi 的平均值
- python - Python & Mcpi (minecraft) - 连接被拒绝错误
- javascript - Chrome 扩展:从弹出窗口到 DOM 的消息传递导致文本框充满“未定义”
- php - 如何像用户单击一样单击 HTML 按钮
- javascript - React 原生子组件没有从父状态获取 componentWillReceiveProps
- javascript - 如何在 JavaScript 中使用矩库进行日期验证?
- asp.net-core - 带有 ASP.NET Core 3.1 和 axios 的 API 进度条
- memory - Power BI (DAX) 中按库存销售额排名前 5 位的产品总和