Выделить текст на странице мышью

Все вопросы касающиеся использования
программы можно задать здесь
Ответить
Аватара пользователя
k907
Сообщения: 225
Зарегистрирован: 21 май 2014, 20:32

Выделить текст на странице мышью

Сообщение k907 » 02 фев 2020, 03:26

Нужна функция для выделения текста на странице.
Использую код:
	$browser->navigate("https://humanemulator.info/");
	$browser->wait_for(60,1);

	$obj = $p->get_by_inner_text("Автоматизация работы в браузер", false);

	$x = $obj->get_x ();
	$y = $obj->get_y ();

	$width = $obj->get_width ();
	$height = $obj->get_height ();

	$dx = $x + rand(1,5);
	$dy = $y + rand(1,5);

	$x_end =  $x + $width  - rand(1,5);
	$y_end =  $y + $height  - rand(1,5);

       //зажать левую клавишу мыши в начале текста
 	$mouse->left_button_down( $dx, $dy);
        sleep(1);

	// отпустить в конце текста
	$mouse->left_button_up($x_end, $y_end);
Проблема в том, что при эмуляции событий (send_left_button_down) код перестает работать.
Нужен вариант без полной эмуляции, для использования в многопоточном режиме.
Подскажите как можно решить эту задачу?

Аватара пользователя
Support
Site Admin
Сообщения: 825
Зарегистрирован: 10 апр 2009, 17:45
Контактная информация:

Re: Выделить текст на странице

Сообщение Support » 02 фев 2020, 13:48

Проверим send_left_button_down если он не работает - исправим.

Аватара пользователя
bigfozzy
Site Admin
Сообщения: 2425
Зарегистрирован: 28 июл 2008, 17:24
Контактная информация:

Re: Выделить текст на странице

Сообщение bigfozzy » 04 фев 2020, 14:48

Чтобы выделить текст нужна эмуляция мыши в такой же последовательности что и руками:
	$browser->navigate("https://humanemulator.info/");
	$obj = $p->get_by_inner_text("Автоматизация работы в браузер", false);

	$x = $obj->get_x ();
	$y = $obj->get_y ();

	$width = $obj->get_width ();
	$height = $obj->get_height ();

	$dx = $x + rand(1,5);
	$dy = $y + rand(1,5);

	$x_end =  $x + $width  - rand(1,5);
	$y_end =  $y + $height  - rand(1,5);

	$mouse->click( $dx, $dy);
	sleep(1);

        //зажать левую клавишу мыши в начале текста
 	$mouse->left_button_down( $dx, $dy);	

	$step_x=($x_end-$dx)/10.0;
	$step_y=($y_end-$dy)/10.0;
	for ($i=0;$i<=10;$i++)
	{
		$mouse->move( $dx+$i*$step_x, $dy+$i*$step_y);	
		usleep(25000);
	}	
	// отпустить в конце текста
	$mouse->left_button_up($x_end, $y_end);

Аватара пользователя
bigfozzy
Site Admin
Сообщения: 2425
Зарегистрирован: 28 июл 2008, 17:24
Контактная информация:

Re: Выделить текст на странице мышью

Сообщение bigfozzy » 04 фев 2020, 15:50

для send_ - скрипт будет выглядеть так :
        $browser->navigate("https://humanemulator.info/");
	$obj = $p->get_by_inner_text("Автоматизация работы в браузер", false);

	$x = $obj->get_x ();
	$y = $obj->get_y ();

	$width = $obj->get_width ();
	$height = $obj->get_height ();

	$dx = $x + rand(1,5);
	$dy = $y + rand(1,5);

	$x_end =  $x + $width  - rand(1,5);
	$y_end =  $y + $height  - rand(1,5);
	
	sleep(1);

        //зажать левую клавишу мыши в начале текста
 	$mouse->send_left_button_down( $dx, $dy);	

	$step_x=($x_end-$dx)/10.0;
	$step_y=($y_end-$dy)/10.0;
	for ($i=0;$i<=10;$i++)
	{
		$mouse->send_move( $dx+$i*$step_x, $dy+$i*$step_y,false,0,0,"LeftMouseButton");	
		usleep(25000);
	}	
	// отпустить в конце текста
	$mouse->send_left_button_up($x_end, $y_end);
+ надо скачать новую версию для работы параметра button:

Аватара пользователя
k907
Сообщения: 225
Зарегистрирован: 21 май 2014, 20:32

Re: Выделить текст на странице мышью

Сообщение k907 » 04 фев 2020, 17:36

Спасибо.
Удобно было бы иметь соответствующий метод у DOM объектов.

Аватара пользователя
k907
Сообщения: 225
Зарегистрирован: 21 май 2014, 20:32

Re: Выделить текст на странице мышью

Сообщение k907 » 15 фев 2020, 00:32

Выделение текста в режиме эмуляции событий не работает.

Этот код выделит только нужный текст: "Автор: Игорь на 20:11 Комментариев нет:"
Используется полная эмуляция мыши.
		$browser->navigate("http://humanemulator.blogspot.com/");
		$browser->wait_for(60,1);

                $obj = $div->get_by_attribute("class","post-footer-line post-footer-line-1", true);
		$obj->scroll_to_view(false);

		$x = $obj->get_x (false);
		$y = $obj->get_y (false);

		$width = $obj->get_width (false);
		$height = $obj->get_height (false);

		// начальная точка 
		$dx = $x - rand(2,5);
		$dy = $y - rand(2,5);

		// конечная точка 
		$x_end =  $x + $width  - rand(1,3);
		$y_end =  $y + $height  - rand(1,3);

		$mouse->move_to($dx, $dy, "curve", rand(500,1000));
		sleep(rand(1,3));
 
	       //зажать левую клавишу мыши в начале текста
		$mouse->left_button_down( $dx, $dy);	

		$step_x=($x_end-$dx)/10.0;
		$step_y=($y_end-$dy)/10.0;
		for ($i=0;$i<=10;$i++)
		{
			$mouse->move( $dx+$i*$step_x, $dy+$i*$step_y);	
			usleep(25000);
		}	

		// отпустить в конце текста
		$mouse->left_button_up($x_end, $y_end);

выделит непонятно что, хотя координаты те же.
Проблема возникает из-за send_move
скрин - http://prntscr.com/r2hwve

		$browser->navigate("http://humanemulator.blogspot.com/");
		$browser->wait_for(60,1);

                $obj = $div->get_by_attribute("class","post-footer-line post-footer-line-1", true);
		$obj->scroll_to_view(false);

		$x = $obj->get_x (false);
		$y = $obj->get_y (false);

		$width = $obj->get_width (false);
		$height = $obj->get_height (false);

		// начальная точка 
		$dx = $x - rand(2,5);
		$dy = $y - rand(2,5);

		// конечная точка 
		$x_end =  $x + $width  - rand(1,3);
		$y_end =  $y + $height  - rand(1,3);

		$mouse->send_move_to($dx, $dy, "curve", rand(500,1000));
		sleep(rand(1,3));

               //зажать левую клавишу мыши в начале текста
		$mouse->send_left_button_down( $dx, $dy);	

		$step_x=($x_end-$dx)/10.0;
		$step_y=($y_end-$dy)/10.0;
		for ($i=0;$i<=10;$i++)
		{

			$mouse->send_move( $dx+$i*$step_x, $dy+$i*$step_y,false,0,0,"LeftMouseButton");	
			usleep(25000);
		}	

		// отпустить в конце текста
		$mouse->send_left_button_up($x_end, $y_end);

Исправьте пожалуйста.

Аватара пользователя
bigfozzy
Site Admin
Сообщения: 2425
Зарегистрирован: 28 июл 2008, 17:24
Контактная информация:

Re: Выделить текст на странице мышью

Сообщение bigfozzy » 15 фев 2020, 11:36

А вы системы координат смешали - с учетом скрола и без - вот так работает:
		$browser->navigate("http://humanemulator.blogspot.com/");
		$browser->wait_for(60,1);

        $obj = $div->get_by_attribute("class","post-footer-line post-footer-line-1", true);
		$obj->scroll_to_view(false);

		$x = $obj->get_x (false);
		$y = $obj->get_y (false);


		$width = $obj->get_width (false);
		$height = $obj->get_height (false);

		// начальная точка 
		$dx = $x - rand(2,5);
		$dy = $y - rand(2,5);

		// конечная точка 
		$x_end =  $x + $width  - rand(1,3);
		$y_end =  $y + $height  - rand(1,3);

		$mouse->send_move_to($dx, $dy, "curve", rand(500,1000));
		sleep(rand(1,3));

               //зажать левую клавишу мыши в начале текста
		$mouse->send_left_button_down( $dx, $dy);	
        echo $dx." ".$dy."\n";

		$step_x=($x_end-$dx)/10.0;
		$step_y=($y_end-$dy)/10.0;
		for ($i=0;$i<=10;$i++)
		{

			$mouse->send_move( $dx+$i*$step_x, $dy+$i*$step_y,true,0,0,"LeftMouseButton");				
			usleep(25000);
		}	

		// отпустить в конце текста
		$mouse->send_left_button_up($x_end, $y_end);
		echo $x_end." ".$y_end."\n";

Аватара пользователя
k907
Сообщения: 225
Зарегистрирован: 21 май 2014, 20:32

Re: Выделить текст на странице мышью

Сообщение k907 » 15 фев 2020, 23:14

bigfozzy писал(а):
15 фев 2020, 11:36
А вы системы координат смешали - с учетом скрола и без - вот так работает:
Спасибо

Ответить