Я использую SikuliX, чтобы проверить, закончилось ли видео на веб-сайте.Проверьте, завершено ли видео
Я делаю это путем сравнения моего региона (который является моим окном активного браузера) для захвата экрана региона, который я использовал во время воспроизведения видео.
Если это не соответствует, значит, видео все еще воспроизводится, и я возьму новый захват экрана, который будет снова проходить через цикл while для сравнения. Если это соответствует, значит, видео остановилось и выйдет из цикла while.
Он работает, когда он сначала проходит через петлю. Цикл while возвращает значение null, что означает воспроизведение видео. Тем не менее, во второй раз, когда он петли, он выйдет из цикла while и скажет, что мое видео остановлено, но, очевидно, нет.
Является ли моя логика испорченной?
// Get dimensions of the bounding rectangle of the specified window
WinDef.HWND hwnd = User32.INSTANCE.GetForegroundWindow();
WinDef.RECT dimensions = new WinDef.RECT();
// Get screen coordinates of upper-left and lower-right corners of the window in dimensions
User32.INSTANCE.GetWindowRect(hwnd, dimensions);
Rectangle window = new Rectangle(dimensions.toRectangle());
int x = window.x;
int y = window.y;
int width = window.width;
int height = window.height;
// Initialize screen region for Sikuli to match
Region region = new Region(x, y, width, height);
Robot robot;
Image image;
Pattern p;
try {
robot = new Robot(); // Gets and saves a reference to a new Robot object
} catch (AWTException e) {
throw new RuntimeException(
"Failed to initialize robot...");
}
robot.delay(3000); // Delay robot for 3 seconds
// Take a screen capture of the region
BufferedImage capture = robot.createScreenCapture(dimensions.toRectangle());
image = new Image(capture);
p = new Pattern(image);
region.wait(1.0); // Wait 1 second
// Check if region content is still the same
while (region.exists(p.similar((float) 0.99), 0) == null) {
System.out.println("Video is playing");
// Take a new screen capture of the region
BufferedImage captureLoop = robot.createScreenCapture(dimensions.toRectangle());
image = new Image(captureLoop);
p = new Pattern(image);
region.wait(1.0); // Wait 1 second
}
System.out.println("Video has stopped");