Selenium + BS4 восстановить скрытый элемент - PullRequest
0 голосов
/ 16 февраля 2019

Я написал следующий код для извлечения 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?

Ответы [ 2 ]

0 голосов
/ 17 февраля 2019

Вы переходите на целевую страницу, но вам нужно перейти на вкладку статистики, чтобы создать необходимый 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()
0 голосов
/ 17 февраля 2019

В браузере и в инструментах разработки вы получите эти значения, потому что браузер, возможно, уже загрузил содержимое.Вам придется подражать тому же поведению при использовании селена.Подождите некоторое время, пока содержимое будет загружено в веб-драйвер селена с помощью 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>

...