Compare commits

..

2 Commits

Author SHA1 Message Date
Sascha Nitsch 4ea99cd4f8 fixed mouse movent, now takes scroll position into account 2024-09-04 18:58:35 +02:00
Sascha Nitsch 7a8895df33 support for scrolling up and down 2024-09-04 18:57:52 +02:00
2 changed files with 48 additions and 0 deletions

View File

@ -57,6 +57,9 @@ function mousemove($main, $control, $options) : bool
$targetPos = $control->getElementRect($element); $targetPos = $control->getElementRect($element);
$targetX = $targetPos['x'] + $targetPos['width'] / 2; $targetX = $targetPos['x'] + $targetPos['width'] / 2;
$targetY = $targetPos['y'] + $targetPos['height'] / 2; $targetY = $targetPos['y'] + $targetPos['height'] / 2;
$scroll = $control->getScrollPosition();
$targetX -= $scroll[0];
$targetY -= $scroll[1];
// echo "move $element - $tokens[1] $targetX $targetY\n"; // echo "move $element - $tokens[1] $targetX $targetY\n";
$mouseX = $main->getMouseX(); $mouseX = $main->getMouseX();
$mouseY = $main->getMouseY(); $mouseY = $main->getMouseY();
@ -98,6 +101,24 @@ function mousemoverel($main, $control, $options)
return true; return true;
} }
/**
* scroll
*
* @param \ScriptedBrowser\Main $main
* @unused-param $main
* @param \ScriptedBrowser\Control $control control interface
* @unused-param $control
* @param array<string,mixed> $options options
* @return bool always true
*/
function scroll($main, $control, $options)
{
$amount = $options['parameter'];
$delay = $options['delay'];
$control->scroll(intval($amount), floatval($delay));
return true;
}
/** /**
* sleep * sleep
* *

View File

@ -174,6 +174,16 @@ class Control
return (!is_array($url)) ? $url : ''; return (!is_array($url)) ? $url : '';
} }
/**
* get scroll position
*
* @return [int,int] current scroll position
*/
public function getScrollPosition()
{
return $this->executeScript('return [window.pageXOffset, window.pageYOffset];');
}
/** /**
* move mouse to absolute position * move mouse to absolute position
* *
@ -273,6 +283,23 @@ class Control
@socket_close($socket); @socket_close($socket);
} }
/**
* scroll given amount
*
* @param int $amount
* @param float $delay delay per scroll
* @return void
*/
public function scroll($amount, $delay)
{
$dir = $amount > 0 ? 5 : 4;
$count = abs($amount);
for ($i = 0; $i < $count; ++$i) {
fwrite($this->xdotool, "click $dir\n");
usleep($delay * 1000 * 1000);
}
}
/** /**
* find elements with given css selector * find elements with given css selector
* *