首页 > 解决方案 > 查找方法不提取已经存在的 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 表的运气。

标签: pythonhtmlcssselenium

解决方案


转到页面,单击弹出窗口,移至 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

推荐阅读