Selenium + BS4 检索隐藏元素
Selenium + BS4 retrieve hidden element
我编写了以下代码来检索 div 和 class "tab-statistics-1-statistic"。这一个嵌套在 "statistics-content" div 中。
soup.find(id="statistics-content").find(id="tab-statistics-1-statistic")
但是当我打印上面一行的输出时它只有 returns "div id='statistics-content'>" 即使在 "Inspect element" 中 div 包含嵌套元素。用于此代码的页面是 https://www.flashscore.com/match/CM2dBaSF/#match-summary
如何访问 div 中的嵌套元素?
在浏览器和开发工具中,您将获得这些值,因为浏览器可能已经加载了内容。使用 selenium 时,您将不得不模拟相同的行为。等待一段时间,直到内容通过使用加载到 selenium web 驱动程序中
WebDriverwait
示例代码如下。
driver=driver = webdriver.Chrome("D:\chromedriver.exe")
driver.get('https://www.flashscore.com/match/CM2dBaSF/#match-statistics;0')
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID ,'tab-statistics-1-statistic')
html = driver.page_source
soup=BeautifulSoup(html)
print(soup.find(id="statistics-content").find(id="statistics-1-statistic"))
示例输出
<li class="li1" id="statistics-1-statistic"><span><a onclick="detail_tab(['statistics', '1-statistic']);">1st Half</a></span></li>
您正在导航至着陆页,但需要点击进入统计信息选项卡以生成所需的 html。您需要留出时间让 javascript 到 运行 填充信息。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
d = webdriver.Chrome()
url ='https://www.flashscore.com/match/CM2dBaSF/#match-summary'
d.get(url)
d.find_element_by_id('a-match-statistics').click()
item = WebDriverWait(d, 5).until(EC.presence_of_element_located((By.ID , 'tab-statistics-0-statistic')))
print(item.text)
d.quit()
由于为统计信息选项卡生成了一个新的 url,您可以直接使用它
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
d = webdriver.Chrome()
urlDirect = 'https://www.flashscore.com/match/CM2dBaSF/#match-statistics;0'
d.get(urlDirect)
item = WebDriverWait(d, 5).until(EC.presence_of_element_located((By.ID , 'tab-statistics-0-statistic')))
print(item.text)
d.quit()
我编写了以下代码来检索 div 和 class "tab-statistics-1-statistic"。这一个嵌套在 "statistics-content" div 中。
soup.find(id="statistics-content").find(id="tab-statistics-1-statistic")
但是当我打印上面一行的输出时它只有 returns "div id='statistics-content'>" 即使在 "Inspect element" 中 div 包含嵌套元素。用于此代码的页面是 https://www.flashscore.com/match/CM2dBaSF/#match-summary
如何访问 div 中的嵌套元素?
在浏览器和开发工具中,您将获得这些值,因为浏览器可能已经加载了内容。使用 selenium 时,您将不得不模拟相同的行为。等待一段时间,直到内容通过使用加载到 selenium web 驱动程序中
WebDriverwait
示例代码如下。
driver=driver = webdriver.Chrome("D:\chromedriver.exe")
driver.get('https://www.flashscore.com/match/CM2dBaSF/#match-statistics;0')
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID ,'tab-statistics-1-statistic')
html = driver.page_source
soup=BeautifulSoup(html)
print(soup.find(id="statistics-content").find(id="statistics-1-statistic"))
示例输出
<li class="li1" id="statistics-1-statistic"><span><a onclick="detail_tab(['statistics', '1-statistic']);">1st Half</a></span></li>
您正在导航至着陆页,但需要点击进入统计信息选项卡以生成所需的 html。您需要留出时间让 javascript 到 运行 填充信息。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
d = webdriver.Chrome()
url ='https://www.flashscore.com/match/CM2dBaSF/#match-summary'
d.get(url)
d.find_element_by_id('a-match-statistics').click()
item = WebDriverWait(d, 5).until(EC.presence_of_element_located((By.ID , 'tab-statistics-0-statistic')))
print(item.text)
d.quit()
由于为统计信息选项卡生成了一个新的 url,您可以直接使用它
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
d = webdriver.Chrome()
urlDirect = 'https://www.flashscore.com/match/CM2dBaSF/#match-statistics;0'
d.get(urlDirect)
item = WebDriverWait(d, 5).until(EC.presence_of_element_located((By.ID , 'tab-statistics-0-statistic')))
print(item.text)
d.quit()