Я пытаюсь получить URL-адрес тега из HTML-кода сайта https://95jun.kinoxor.pro/984-univer-13-let-spustja-2024-07-06-19-54.html
Сайт хитрый. Открыть его можно с этой страницы (первый/второй результат поисковика https://yandex.ru/search/?text=https%3A%2F%2Fkinokubok.pro%2F232-univer-13-let- spustja-2024-06-25-19-51.html&lr=21653
Я ищу этот URL-адрес: <iframe src="https://api.stiven-king.com/storage.html" ...
Доказательство существования URL:
Как я могу получить содержимое html-тега?
Мой код:
import seleniumwire.undetected_chromedriver as uc
import time
options = uc.ChromeOptions()
options.add_argument('--ignore-ssl-errors=yes')
options.add_argument('--ignore-certificate-errors')
driver = uc.Chrome(options=options)
def interceptor(request):
del request.headers['Referer']
request.headers['Referer'] = 'https://yandex.ru/'
url = "https://125jun.kinoamor.pro/251-univer-13-let-spustja-2024-06-27-19-51.html"
driver.request_interceptor = interceptor
driver.get(url)
time.sleep(3)
iframe_tag_elements = driver.find_elements("xpath", "//iframe")
print(f"FOUND VIDEO TAGS: {len(iframe_tag_elements)}") # prints 7
for iframe_elem in iframe_tag_elements:
video_url = iframe_elem.get_attribute("src")
if video_url:
print("XXX_ ", video_url)
**ПРОБЛЕМА** – URL-адрес https://api.stiven-king.com/storage.html не печатается.
Также я не вижу URL-адрес driver.page_source
Я пытался уснуть, пролистать страницу, но это не помогло
Тоже было. пытался driver.switch_to.frame(iframe_elem)
и снова искал iframes
Причина, по которой вы не можете найти тег видео на этой странице, заключается в том, что контент загружается через iframe. Мое предложение вам будет заключаться в следующем:
Переключение может быть выполнено следующими способами:
video_frames = driver.find_elements("xpath", "//iframe")
driver.switch_to.frame(video_frames)
driver.switch_to.default_content()
Судя по скриншоту. Вы можете переключиться на проверку iframe для локатора #MiuiBrowser
. Если это существует, проверьте iframe, чтобы получить источник. Для меня странно то, что для моего местоположения я получаю только 5 iframe. Поэтому вы не можете увидеть iframe, который вы получаете.
<iframe>
с src="https://api.stiven-king.com/storage.html" вложен в другой iframe, чтобы найти его, вам нужно сначала переключить контекст на его родительский фрейм:
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
driver = webdriver.Chrome()
driver.get('https://125jun.kinoamor.pro/251-univer-13-let-spustja-2024-07-05-20-52.html')
WebDriverWait(driver, 30).until(EC.frame_to_be_available_and_switch_to_it(driver.find_element(By.CSS_SELECTOR, 'iframe')))
src = driver.find_element(By.CSS_SELECTOR, 'iframe').get_attribute('src')
print(src)
Код не работает
@mascai ты обновил URL? попробуй это https://01jul.kinokubok.pro/232-univer-13-let-spustja.html
да, URL обновлен, поскольку предыдущий был заблокирован, но сайт тот же (та же проблема, тот же код)
Как предложено в других ответах, вам нужно переключиться на ссылку <iframe>
, содержащую искомую ссылку. Но вместо того, чтобы искать первый <iframe>
, вы можете указать более конкретный локатор.
# replaced the url
url = "https://01jul.kinokubok.pro/232-univer-13-let-spustja-2024-07-03-20-19.html"
driver.request_interceptor = interceptor
driver.get(url)
WebDriverWait(driver, 30).until(ec.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR, "#dle-content .video-box > iframe:not([src])")))
iframe_tag_elements = driver.find_elements("xpath", "//iframe")
print(f"FOUND VIDEO TAGS: {len(iframe_tag_elements)}")
for iframe_elem in iframe_tag_elements:
video_url = iframe_elem.get_attribute("src")
if video_url:
print("XXX_ ", video_url)
Выход
FOUND VIDEO TAGS: 1
XXX_ https://api.stiven-king.com/storage.html
Если вам нужны все значения <iframe>
s, вы можете создать рекурсивную функцию для их извлечения.
Чтобы ускорить загрузку страницы, вы можете установить page_load_strategy
на 'eager'
, но имейте в виду, что вам, возможно, придется немного подождать, если загрузка будет слишком быстрой.
Полный код
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec
import seleniumwire.undetected_chromedriver as uc
options = uc.ChromeOptions()
options.add_argument('--ignore-ssl-errors=yes')
options.add_argument('--ignore-certificate-errors')
options.page_load_strategy = 'eager'
driver = uc.Chrome(options=options)
def interceptor(request):
del request.headers['Referer']
request.headers['Referer'] = 'https://yandex.ru/'
def get_frame_data(frames):
src = []
for frame in frames:
video_url = frame.get_attribute("src")
if video_url:
src.append(video_url)
driver.switch_to.frame(frame)
child_frames = driver.find_elements("xpath", "//iframe")
if child_frames:
src.extend(get_frame_data(child_frames))
driver.switch_to.default_content()
return src
url = "https://01jul.kinokubok.pro/232-univer-13-let-spustja-2024-07-03-20-19.html"
driver.request_interceptor = interceptor
driver.get(url)
wait = WebDriverWait(driver, 10)
wait.until(ec.visibility_of_element_located(("id", "grid")))
wait.until(ec.visibility_of_element_located(("class name", "karusel")))
iframe_tag_elements = driver.find_elements("xpath", "//iframe")
all_src = get_frame_data(iframe_tag_elements)
for sr in all_src:
print("XXX_ ", sr)
Выход 1:
XXX_ https://api.marts.ws/embed/movie/74360
XXX_ https://loosening-as.allarknow.online/?token_movie=be2b9578d8cae35323bb199f888be1&token=b5c08f668c592ee23d32031d27de44
XXX_ https://www.youtube.com/embed/mthO33phh9U
XXX_ https://yastatic.net/share2/v-1.16.0/frame.html?namespace=ya-share2.0.7255632935282506
XXX_ https://yastatic.net/share2/v-1.16.0/frame.html?namespace=ya-share2.0.027842698862642123
Выход 2:
XXX_ https://api.stiven-king.com/storage.html
XXX_ https://loosening-as.allarknow.online/?token_movie=be2b9578d8cae35323bb199f888be1&token=b5c08f668c592ee23d32031d27de44
XXX_ https://www.youtube.com/embed/mthO33phh9U
XXX_ https://yastatic.net/share2/v-1.16.0/frame.html?namespace=ya-share2.0.9638742292394189
XXX_ https://yastatic.net/share2/v-1.16.0/frame.html?namespace=ya-share2.0.8570699995377056
Спасибо, а как проверить все кадры? Не только для «#dle-content .video-box > iframe:not([src])»
Можно ли остановить загрузку через 10 секунд и попробовать переключиться на элементы кадра?
@mascai см. обновленный ответ
Спасибо, но это не помогло