Как добавить еще событий для поиска?
Как добавить еще событий для поиска?
есть скрипт
<?php
$xhe_host = "127.0.0.1:7010";
// The following code is required to properly run XWeb Human Emulator
require("../Templates/xweb_human_emulator.php");
$bUTF8Ver=true;
$browser->navigate("https://olimp.com/mobile/index.php?page ... n=1&live=1");
//Авторизация
$anchor->click_by_inner_text("ВОЙТИ", false);
sleep(1);
$input->set_inner_text_by_name("login", "dmmmy3@gmail.com");$input->set_inner_text_by_name("passw", "");
sleep(1);
$input->set_inner_text_by_name("passw", "q.DAY.Wm3S2Rnhd");
sleep(1);
$button->click_by_value("Войти", false);
sleep(1);
//$browser->navigate("https://olimp.com/mobile/index.php?page ... n=1&live=1");
$text="2:6"; // !!!!! текст который надо найти
//выбор игры
//sleep(1);
$div->click_by_inner_text("TENNIS");
sleep(1);
$evnt = $span->get_by_inner_text($text, false);
while(!$evnt->is_visibled())
{
echo "Ждем появление нужного текста <br>";
sleep(1);
$evnt = $span->get_by_inner_text($text, false);
}
$prnt= $evnt->get_parent(2);
echo $prnt->get_inner_html();
$an= $prnt->get_child_by_attribute("href","index",false);
echo $an->get_href();
$an->send_mouse_click(3,2);
echo "вижу событие <br>";
// Quit
$app->quit();
?>
а как добавить еще признаков, по которым определять игру? например 2:6 уже есть, а надо чтобы и 6:2 тоже искал?
Я пробовал так, ввести еще переменную $text2="6:2"; и вставив ее в соответствующих строчках, где есть переменная $text ну вообщем вот так:
$text="2:6";
$text1="6:2";
//выбор игры
$div->click_by_inner_text("TENNIS");
sleep(1);
$evnt = $span->get_by_inner_text($text xor $text1, false);
while(!$evnt->is_visibled())
{
echo "Ждем появление нужного текста <br>";
sleep(1);
$evnt = $span->get_by_inner_text($text xor $text1, false);
}
$prnt= $evnt->get_parent(2);
echo $prnt->get_inner_html();
$an= $prnt->get_child_by_attribute("href","index",false);
echo $an->get_href();
$an->send_mouse_click(3,2);
echo "вижу событие <br>";
так же попробовал в 1 переменной записать - $text="2:6 xor 6:2"; ,или так $text="2:6 or 6:2";, и вот так $text="2:6 || 6:2"; но не получается!
<?php
$xhe_host = "127.0.0.1:7010";
// The following code is required to properly run XWeb Human Emulator
require("../Templates/xweb_human_emulator.php");
$bUTF8Ver=true;
$browser->navigate("https://olimp.com/mobile/index.php?page ... n=1&live=1");
//Авторизация
$anchor->click_by_inner_text("ВОЙТИ", false);
sleep(1);
$input->set_inner_text_by_name("login", "dmmmy3@gmail.com");$input->set_inner_text_by_name("passw", "");
sleep(1);
$input->set_inner_text_by_name("passw", "q.DAY.Wm3S2Rnhd");
sleep(1);
$button->click_by_value("Войти", false);
sleep(1);
//$browser->navigate("https://olimp.com/mobile/index.php?page ... n=1&live=1");
$text="2:6"; // !!!!! текст который надо найти
//выбор игры
//sleep(1);
$div->click_by_inner_text("TENNIS");
sleep(1);
$evnt = $span->get_by_inner_text($text, false);
while(!$evnt->is_visibled())
{
echo "Ждем появление нужного текста <br>";
sleep(1);
$evnt = $span->get_by_inner_text($text, false);
}
$prnt= $evnt->get_parent(2);
echo $prnt->get_inner_html();
$an= $prnt->get_child_by_attribute("href","index",false);
echo $an->get_href();
$an->send_mouse_click(3,2);
echo "вижу событие <br>";
// Quit
$app->quit();
?>
а как добавить еще признаков, по которым определять игру? например 2:6 уже есть, а надо чтобы и 6:2 тоже искал?
Я пробовал так, ввести еще переменную $text2="6:2"; и вставив ее в соответствующих строчках, где есть переменная $text ну вообщем вот так:
$text="2:6";
$text1="6:2";
//выбор игры
$div->click_by_inner_text("TENNIS");
sleep(1);
$evnt = $span->get_by_inner_text($text xor $text1, false);
while(!$evnt->is_visibled())
{
echo "Ждем появление нужного текста <br>";
sleep(1);
$evnt = $span->get_by_inner_text($text xor $text1, false);
}
$prnt= $evnt->get_parent(2);
echo $prnt->get_inner_html();
$an= $prnt->get_child_by_attribute("href","index",false);
echo $an->get_href();
$an->send_mouse_click(3,2);
echo "вижу событие <br>";
так же попробовал в 1 переменной записать - $text="2:6 xor 6:2"; ,или так $text="2:6 or 6:2";, и вот так $text="2:6 || 6:2"; но не получается!
Re: Как добавить еще событий для поиска?
Текст в этой переменной это текст под Именем игроков(см рисунок). Если хотите какие то критерии добавить то строка, которую вы ищете должна быть в том же формате как и строка под именем.dmmmy3 писал(а): ↑17 сен 2020, 19:50
$text="2:6"; // !!!!! текст который надо найтиа как добавить еще признаков, по которым определять игру? например 2:6 уже есть, а надо чтобы и 6:2 тоже искал?
Я пробовал так, ввести еще переменную $text2="6:2"; и вставив ее в соответствующих строчках, где есть переменная $text ну вообщем вот так:
К примеру у нас есть такое:
Хейман К. - Дуссин Л. Serve
Приостановлен
0:1 (2:6, 4:3) 30:30
получается что мы можем сделать следующее:
$n1 = "0:1"; $n2 = "2:6"; $n3 = "4:3" $n4= "30:30";В результате имеем для подмены полной строки:
$text = "$n1 ($n2, $n3) $n4";если чать строки тогда к примеру:
$text = "($n2, $n3)"; или $text = "$n2, $n3"; и т.д.
Re: Как добавить еще событий для поиска?
Я наверное, не правильно выразился! Я имел ввиду, чтобы бралась игра со счётом 2:3 и зеркально 3:2, но не в одной игре, а в разных!
Re: Как добавить еще событий для поиска?
Что делает пример ниже:
находит по заданному тексту игру и открывает её в новой вкладке, потом отзеркаливает текст и ищет новую игру и открывает её в новой вкладке.
Для того что бы указать вкладку браузера, в которой нужно работать скрипту используется функция $browser->set_active_browser(n); где n - порядковый номер вкладки начиная с нуля. Для открытия в новой вкладке используем добавление атрибута target=_blank. В скрипте это $an->add_attribute("target","_blank"); Открываемая вкладка всегда будет последней. При необходимости её номер можно узнать следующим образом: $last_browser_num = $browser->get_count()-1;
находит по заданному тексту игру и открывает её в новой вкладке, потом отзеркаливает текст и ищет новую игру и открывает её в новой вкладке.
Для того что бы указать вкладку браузера, в которой нужно работать скрипту используется функция $browser->set_active_browser(n); где n - порядковый номер вкладки начиная с нуля. Для открытия в новой вкладке используем добавление атрибута target=_blank. В скрипте это $an->add_attribute("target","_blank"); Открываемая вкладка всегда будет последней. При необходимости её номер можно узнать следующим образом: $last_browser_num = $browser->get_count()-1;
<?php $xhe_host = "127.0.0.1:7010"; // The following code is required to properly run XWeb Human Emulator require("../Templates/xweb_human_emulator.php"); $bUTF8Ver=true; $browser->enable_proxy("","socks5://127.0.0.1:9150"); // закрываем все браузеры перед работай скрипта $browser->close_all_tabs(); $browser->navigate("https://olimp.com/mobile/index.php?page ... n=1&live=1"); // Авторизация $anchor->click_by_inner_text("ВОЙТИ", false); sleep(1); $input->set_inner_text_by_name("login", "dmmmy3@gmail.com");$input->set_inner_text_by_name("passw", ""); sleep(1); $input->set_inner_text_by_name("passw", "q.DAY.Wm3S2Rnhd"); sleep(1); $button->click_by_value("Войти", false); sleep(1); //$browser->navigate("https://olimp.com/mobile/index.php?page ... n=1&live=1"); $text="6:2"; // !!!!! текст который надо найти //выбор игры //sleep(1); $div->click_by_inner_text("ТЕННИС"); sleep(1); // открываем игру с заданным текстом // в новом окне open_game($text); // что делаем на странице с игрой // делаем активным первый браузер $browser->set_active_browser(0); // strrev // выводим отзеркаленый текст в панель отладки echo strrev($text)."<br"; // открываем отзеркаленную игру open_game(strrev($text)); // что то делаем на странице с игрой // открыть игру function open_game($text) { global $span; // получить элемент по тексту $evnt = $span->get_by_inner_text($text, false); // ожидаем пока появится нужный текст while(!$evnt->is_visibled()) { echo "Ждем появление нужного текста <br>"; sleep(1); $evnt = $span->get_by_inner_text($text, false); } // получить родительский элемент на два уровня выше в дереве $prnt= $evnt->get_parent(2); // получить его html для проверки echo $prnt->get_inner_html()."<br"; // получаем ссылку на игру $an= $prnt->get_child_by_attribute("href","index",false); // добавим атрибут что бы при клике открывался в новом окне $an->add_attribute("target","_blank"); usleep(500); // проверка ссылки echo $an->get_href()."<br"; // кликаем через передачу события от мыши элементу $an->send_mouse_click(3,2); return true; } // Quit $app->quit(); ?>
Re: Как добавить еще событий для поиска?
а если кодим вот так, разве оно не должно срабатывать, однако не срабатывает и поиск по нескольким переменным на странице не происходит
//Опознание пола игрока $s1 = "Мужчины"; $s2 = "родился"; $s3 = "Теннисист "; $search = "($s1, $s2, $s3)"; if ($div->is_exist_by_inner_text("$search", false)){ echo "<br>Играют мужики! Потому что я нашел $search<br>"; } else { echo "<br>Играют женщины! <br>"; }а срабатывает только если вместо $search вписать то что есть на странице, например: мужчины или женщины?
Re: Как добавить еще событий для поиска?
Только если есть чёткое совпадение такой строки. По вашему коду он ищет вхождение такого куска строки "(Мужчины, родился, Теннисист)" . Если вам нужно каждую строку проверять на вхождение отдельно каждого слова то это надо делать перебором.dmmmy3 писал(а): ↑18 сен 2020, 20:43а если кодим вот так, разве оно не должно срабатывать, однако не срабатывает и поиск по нескольким переменным на странице не происходит
//Опознание пола игрока $s1 = "Мужчины"; $s2 = "родился"; $s3 = "Теннисист "; $search = "($s1, $s2, $s3)"; if ($div->is_exist_by_inner_text("$search", false)){ echo "<br>Играют мужики! Потому что я нашел $search<br>"; } else { echo "<br>Играют женщины! <br>"; }а срабатывает только если вместо $search вписать то что есть на странице, например: мужчины или женщины?
Re: Как добавить еще событий для поиска?
а как это сделать перебором? команда какая то?
Re: Как добавить еще событий для поиска?
Нет, вам нужно получить все элементы с текстом счёта игр, после чего пройтись по всем элементам и сопоставить текст элементов с теми текстами, которые вам надо найти, если нашли по одному из вариантов совпадение берёте этот элемент, получаете ссылку возле него и переходите по ней.
Для этого надо найти в дереве элементы и посмотреть какие у них общие атрибуты и по этим атрибутам получить все и пройтись по ним с проверкой.
Re: Как добавить еще событий для поиска?
Допустим есть страница c информацией о теннисисте: https://yandex.ru/search/?text=%D0%A0%D ... .&lr=10306 нужно по странице в заголовках и в теле сниппета проверить перебором слова: "Мужчины, Родился, теннисист ". Если есть одно из этих слов, делаем одно действие, если нет то другое.
У сниппета общий класс во всех записях в заголовках: organic__url-text
А в теле сниппета: text-container typo typo_text_m typo_line_m organic__text
Значит получаем текст из этого класса, а дальше то как искать? Помогите реализовать пожалуйста!
<?php
$xhe_host = "127.0.0.1:6";
// The following code is required to properly run XWeb Human Emulator
require("../Templates/xweb_human_emulator.php");
$bUTF8Ver=true;
$div->get_inner_text_by_attribute("class", "organic__url-text", false);
$div->get_inner_text_by_attribute("class", "text-container typo typo_text_m typo_line_m organic__text", false);
// Quit
$app->quit();
?>
У сниппета общий класс во всех записях в заголовках: organic__url-text
А в теле сниппета: text-container typo typo_text_m typo_line_m organic__text
Значит получаем текст из этого класса, а дальше то как искать? Помогите реализовать пожалуйста!
<?php
$xhe_host = "127.0.0.1:6";
// The following code is required to properly run XWeb Human Emulator
require("../Templates/xweb_human_emulator.php");
$bUTF8Ver=true;
$div->get_inner_text_by_attribute("class", "organic__url-text", false);
$div->get_inner_text_by_attribute("class", "text-container typo typo_text_m typo_line_m organic__text", false);
// Quit
$app->quit();
?>
Re: Как добавить еще событий для поиска?
Ниже пример для заголовков. Если есть вхождения в заголовок одного из слов делаем клик по заголовку. По идее все заголовки где есть вхождения одного из вариантов будут открыты в отдельных окнах.
// массив со словами для поиска $arr_seach = array("Мужчины", "Родился", "теннисист", "новости"); // переходим на яндекс $browser->navigate("https://yandex.ru/"); // вводим в поиск $input->send_keyboard_input_by_name("text","Райсма К. тенис год рожения\n", "20:40"); // получить все заголовки $snps = $div->get_all_by_attribute("class","organic__url-text"); // вывод всех текстов заголовков в панель отладки print_r($snps->get_inner_text()); // пройдёмся по всем полученным заголовокам foreach($snps->elements as $title) { echo "заголовок: ".$title->get_inner_text()."<br>"; // проверим каждый заголовок проверочным словом foreach($arr_seach as $search) { echo "ищем слово: $search<br>"; // ищем поисковое слово в тексте заголовка $ind = strpos($title->get_inner_text(),$search); if($ind!==FALSE) { echo "нашли слово $search в заголовке".$title->get_inner_text(); // кликаем по заголовку мышью $title->send_mouse_click(2,3); // возвращаемся на активную вкладку для дальнейшего поиска $browser->set_active_browser(0); } } }
Re: Как добавить еще событий для поиска?
Большое спасибо!
Re: Как добавить еще событий для поиска?
По примеру выше написал следующий скрипт, его задача отсканировать текст снипета страницы определить пол, в случае совпадения слова из массива и присвоить переменную $gender, но почему то всё время else срабатывает и определяет что это женщина хотя на странице теннисист Бублик. Помогите подправить пожалуйста, что не так!?
страница с теннисистом: https://yandex.ru/search/?text=%D0%B1%D ... F&lr=10306
страница с теннисистом: https://yandex.ru/search/?text=%D0%B1%D ... F&lr=10306
<?php $xhe_host = "127.0.0.1:7"; // The following code is required to properly run XWeb Human Emulator require("../Templates/xweb_human_emulator.php"); $bUTF8Ver=true; // массив со словами для поиска $arr_seach = array(" Муж", "Родился", "теннисист ", " он ", " ему ", " его ", "игрок "); // получить все заголовки $snps = $div->get_all_by_attribute("class","text-container typo typo_text_m typo_line_m organic__text"); // вывод всех текстов заголовков в панель отладки print_r($snps->get_inner_text()); // пройдёмся по всем полученным заголовокам foreach($snps->elements as $title) { echo "заголовок: ".$title->get_inner_text()."<br>"; // проверим каждый заголовок проверочным словом foreach($arr_seach as $search) { echo "ищем слово: $search<br>"; // ищем поисковое слово в тексте заголовка $ind = strpos($title->get_inner_text(),$search); if($ind!==FALSE) { echo "нашли слово $search в заголовке".$title->get_inner_text(); $gender=1; echo "<br>Играют мужчины<br>"; } else { $gender=0; echo "<br>Играют женщины<br>"; } } } echo "<br>$gender"; // Quit $app->quit(); ?>
Re: Как добавить еще событий для поиска?
Да вроде всё правильно он находит. Если убрать , в "теннисист," и оставить просто "теннисист", то он найдёт и выдаст:
В остальных случаях он просто не находит вхождения указанных строк в массиве.
ищем слово: теннисист в заголовке Алекса́ндр Станисла́вович Бу́блик — казахстанский профессиональный теннисист, до 2016 года выступавший за Россию. Первая ракетка Казахстана. нашли слово теннисист в заголовкеАлекса́ндр Станисла́вович Бу́блик — казахстанский профессиональный теннисист, до 2016 года выступавший за Россию. Первая ракетка Казахстана. Играют мужчины
В остальных случаях он просто не находит вхождения указанных строк в массиве.
аголовок: Алекса́ндр Станисла́вович Бу́блик — казахстанский профессиональный теннисист, до 2016 года выступавший за Россию. Первая ракетка Казахстана. ищем слово: Муж в заголовке Алекса́ндр Станисла́вович Бу́блик — казахстанский профессиональный теннисист, до 2016 года выступавший за Россию. Первая ракетка Казахстана. Играют женщины ищем слово: Родился в заголовке Алекса́ндр Станисла́вович Бу́блик — казахстанский профессиональный теннисист, до 2016 года выступавший за Россию. Первая ракетка Казахстана. Играют женщины ищем слово: он в заголовке Алекса́ндр Станисла́вович Бу́блик — казахстанский профессиональный теннисист, до 2016 года выступавший за Россию. Первая ракетка Казахстана. Играют женщины ищем слово: ему в заголовке Алекса́ндр Станисла́вович Бу́блик — казахстанский профессиональный теннисист, до 2016 года выступавший за Россию. Первая ракетка Казахстана. Играют женщины ищем слово: его в заголовке Алекса́ндр Станисла́вович Бу́блик — казахстанский профессиональный теннисист, до 2016 года выступавший за Россию. Первая ракетка Казахстана.
Re: Как добавить еще событий для поиска?
а где в коде слово "в "теннисист,""?
Re: Как добавить еще событий для поиска?
// массив со словами для поиска $arr_seach = array(" Муж", "Родился", "теннисист ", " он ", " ему ", " его ", "игрок ");да. не туда посмотрел, пробел надо убрать, это он в заголовке идёт с , и поэтому не находит.
либо наоборот добавить
// массив со словами для поиска $arr_seach = array(" Муж", "Родился", "теннисист ","теннисист,", " он ", " ему ", " его ", "игрок ");