Использование Selenium и xpath для поиска исходной ссылки на видео MP4 на веб-сайте, например, Fmovies

#python #selenium #xpath

#python #селен #xpath

Вопрос:

selenium и xpath. У меня есть скрипт на python, который использует selenium для извлечения источника видео с веб-сайта фильма. Я могу заставить скрипт воспроизводить видео с помощью Selenium, но хочу очистить ссылку src на видеофайл MP4. Я думаю, что мой синтаксис xpath неверен.

 **** Code ******
# Load selenium components
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait, Select
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
import time

browser = webdriver.Chrome(executable_path=r"C:\temp\chromedriver.exe")

## Link to the movie as an example
url = "https://vw.ffmovies.sc/film/fatman-2020/watching/?server_id=3"
browser.get(url)
element = WebDriverWait(browser,10).until(EC.element_to_be_clickable((By.XPATH, "//*[@id='player']")))
clickable = browser.find_element_by_id("player")
clickable.find_element_by_xpath('.//*').click()
browser.switch_to.frame("iframe-embed") 
time.sleep(5)

### This is where I am stuck.. It cannot find the xpath element.... 
##########################################################################################
## I am getting the xpath wrong. I want the video link to be stored in the link variable. 
link=browser.switch_to.frame(browser.find_element_by_xpath('//*[@id="player"]/iframe').get_attribute('src')) 
## Getting error in the above code                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 

browser.close()
 

Любые советы будут высоко оценены. Спасибо.

Комментарии:

1. Добавьте html-код, почему вы используете iframe в локаторе

2. покажите html-код для элемента, который содержит URL.

Ответ №1:

id='player' находится за пределами iframe, так что вам не следует использовать его в вашем xpath.

введите описание изображения здесь

Таким образом, вы должны рассматривать iframe как корень вашего нового контекста.

Вместо browser.find_element_by_xpath('//*[@id="player"]/iframe').get_attribute('src') того, чтобы пытаться:

browser.find_element_by_xpath('.//video/source').get_attribute('src')

Комментарии:

1. Большое вам спасибо. Это работает. Оцените подробный ответ, чтобы я мог улучшить свои навыки кодирования.

2. Каких подробностей вы ожидаете?

3. Я имел в виду, что это хорошо для меня, чтобы понять.. В нем были все подробные шаги. Спасибо!!!