Я пытаюсь получить текущий html5 видео URL тегов, используя селен (с питоном привязками):Получение текущего URL видео тег с селеном
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://www.youtube.com/watch?v=9x6YclsLHN0')
video = driver.find_element_by_tag_name('video')
url = driver.execute_script("return arguments[0].currentSrc;", video)
print url
driver.quit()
Проблема заключается в том, что значения url
печатается пустым. Почему это и как я могу это исправить?
Я подозреваю, что это потому, что скрипт выполняется и значение currentSrc
возвращается до того, как видео тег инициализирован. Я пытался добавить Explicit Wait, но все еще есть пустая строка распечатана:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
wait = WebDriverWait(driver, 5)
video = wait.until(EC.visibility_of_element_located((By.TAG_NAME, 'video')))
Что заставляет меня чувствовать себя мне нужно сделать это asynchronously. Может случиться media events и ждать, пока начнется воспроизведение video
.
Я также уверен, что currentSrc
должен работать, потому что, если я запустил код в консоли и вручную дождитесь начала видео, я вижу, что он печатает видео значение атрибута currentSrc
.
FYI, также попытался с ява привязок, такой же результат, пустая строка:
WebDriver driver = new ChromeDriver();
driver.get("https://www.youtube.com/watch?v=9x6YclsLHN0");
WebElement video = driver.findElement(By.tagName("video"));
JavascriptExecutor js = (JavascriptExecutor) driver;
String url = (String) js.executeScript("return arguments[0].currentSrc;", video);
System.out.println(url);
Я попробовал его в Java, он работает для меня. Почему вы собираетесь использовать 'currentSrc', когда вы можете получить то же самое из атрибута src? –
@VivekSingh спасибо, я обновил вопрос. Когда я использую 'src', я все равно получаю пустую строку. См. Также примечание о запуске его с консоли. – alecxe