Я написал следующий код для извлечения div с классом "tab-statistics-1-statistics". Этот вложен в div "statistics-content".

soup.find(id="statistics-content").find(id="tab-statistics-1-statistic")

Но когда я печатаю вывод вышеприведенной строки, он возвращает только «div id = 'statistics-content'>», хотя в «Inspect element» div содержит вложенные элементы. Для этого кода используется страница https://www.flashscore.com/match/ CM2dBaSF / # match-summary

Inspect element of page

Как я могу получить доступ к вложенным элементам в div?

0
Sander bakker 16 Фев 2019 в 19:22

2 ответа

Лучший ответ

Вы переходите на целевую страницу, но вам нужно перейти на вкладку статистики, чтобы сгенерировать нужный 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()
1
QHarr 17 Фев 2019 в 11:45

В браузере и инструментах разработки вы будете получать эти значения, потому что браузер, возможно, уже загрузил контент. Вам придется подражать тому же поведению при использовании селена. Подождите некоторое время, пока содержимое загружается в веб-драйвер селена с помощью {{Х0}}

Пример кода ниже.

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>

0
vineethgn 17 Фев 2019 в 06:18