Про Изолированные браузеры в закладках

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

Про Изолированные браузеры в закладках

Сообщение Support » 03 окт 2018, 14:02

Изолированные браузеры в закладках . В этой статье подробно расписано как работать в режиме Изолированные браузеры в закладках. Есть примеры кода для работы в этом режиме.

ababasta
Сообщения: 16
Зарегистрирован: 13 сен 2018, 12:03

Re: Про Изолированные браузеры в закладках

Сообщение ababasta » 03 окт 2018, 14:38

Спасибо, отличная статья для знакомства с работой с вкладками.
А можно расширить ваш пример на случай, если есть 1000+ мейл аккаунтов? Понятно, что столько вкладок разом создавать не стоит. Допустим, что наше железо держит не более 50 вкладок. Нужно поддерживать 50 активных вкладок и после завершения всех действий с мейл аккаунтом вкладку закрывать? Или лучше в существующей вкладке запускать следующий аккаунт?
Набросайте плиз, оптимальную схему для такого случая

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

Re: Про Изолированные браузеры в закладках

Сообщение Support » 03 окт 2018, 16:05

<?php
// получение данных из файла с данными в формате логин;пароль
$emails_from = file("accs.txt");
// максимальное количество закладок
$max_cnt_browser=30;

// получить количество почтовых ящиков
$emails_count = count($emails_from);

// делаем не более максимального числа закладок
if($emails_count>$max_cnt_browser)
   $emails_count = $max_cnt_browser;

// открыть такое же количество закладок с браузерами
$browser->set_count($emails_count);

// обходим все закладки в массиве
for($i=0;$i<count($emails_from);$i++)
{
    // при достижении последнего браузера 
    $n = fmod($i, $emails_count);
    // возвращаемся на первый 
    if(!$n)
    {
       $actv_brws=0;
    }

    // делаем активным  
    echo "$i делаем активным № $actv_brws<br>";
    // делаем активной закладку
    $browser->set_active_browser($actv_brws);
    $browser->wait_for();
    // чистим и пересоздаём
    $browser->clear_cache();
    $browser->clear_cookies(""); 
    $browser->recreate();

    // получим email для закладки
    $u_arr = explode(";",$emails_from[$i]);
    $login = trim($u_arr[0]);
    $pwd =trim($u_arr[1]);

    // тут переходим на страницу логина и входи в аккаунт

    // можем тут же делать и следующие шаги по отправке писем
    // либо вынести их через такой же цикл в следующий шаг

    // активный браузер  
    $actv_brws++;  
}


логика листания закладок-браузеров будет такая:

$cnt_all=23;
$max_cnt_browser=10;
// получить количество почтовых ящиков
$emails_count = $cnt_all;

// делаем не более 50 закладок
if($emails_count>$max_cnt_browser)
   $emails_count = $max_cnt_browser;

// создаём нужное количество браузеров
$browser->set_count($emails_count);

// начальный активный браузер
$actv_brws = 0;
// обходим все закладки в массиве
for($i=0;$i<$cnt_all;$i++)
{ 
    // при достижении последнего браузера 
    $n = fmod($i, $emails_count);
    // возвращаемся на первый 
    if(!$n)
    {
       $actv_brws=0;
    }

  // делаем активным  
  echo "$i делаем активным № $actv_brws<br>";

  $browser->set_active_browser($actv_brws);
  $browser->wait_for();
  // чистим и пересоздаём
  $browser->clear_cache();
  $browser->clear_cookies(""); 
  $browser->recreate();
   
  $browser->navigate("ya.ru");
  sleep(1); 

  // активный браузер  
  $actv_brws++;  
}

Также вместо этого кода
// чистим и пересоздаём
  $browser->clear_cache();
  $browser->clear_cookies(""); 
  $browser->recreate();
можно просто менять папку куков и кэша для вновь используемой закладки на новые. Тут уже как кому будет удобно.

huligun
Сообщения: 55
Зарегистрирован: 01 окт 2010, 19:13

Re: Про Изолированные браузеры в закладках

Сообщение huligun » 16 ноя 2018, 00:14

Сделайте пожалуйста что бы они реально выполнялись паралельно, а не дожидались загрузки страницы.
Чтобы без ожиданий - можно задать:
browser->set_wait_params(0,0);

dimamak
Сообщения: 5
Зарегистрирован: 06 апр 2014, 17:33

Re: Про Изолированные браузеры в закладках

Сообщение dimamak » 01 дек 2018, 01:02

Здравствуйте!
А можно увидеть пример работы с изолированными закладками в нескольких потоках на C#?

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

Re: Про Изолированные браузеры в закладках

Сообщение bigfozzy » 01 дек 2018, 15:31

обновите версию + вот пример
#region using

using System;
using System.Diagnostics;
using System.Collections.Generic;
using System.Linq;
using System.IO;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

using XHE;
using XHE.XHE_DOM;
using XHE.XHE_System;
using XHE.XHE_Window;
using XHE.XHE_Web;

#endregion

 class MyScript:XHEScript
 {
	  static void Main(string[] args)
	  {			
			// init XHE
			server = "127.0.0.1:7011";
			InitXHE();

            browser.set_count(10);
			// go to google
			for (int i=0;i<10;i++)
            {   
                browser.Script.server_tab=i;
                browser.navigate("ya.ru");
            }

			// exit
			app.quit();            
	  }
}
для XHEScripMulti - вместо browser.Script.server_tab=i; - просто server_tab=i;

dimamak
Сообщения: 5
Зарегистрирован: 06 апр 2014, 17:33

Re: Про Изолированные браузеры в закладках

Сообщение dimamak » 01 дек 2018, 19:40

Так это просто последовательный запуск навигейтов в разных вкладках. Я имел ввиду запуск в параллельных потоках разных вкладок. Я использую XHE.dll и пишу прогу в Visual Studio. Программу переписал из PHP скрипта, в надежде как раз на многопоточность и работу в одном Хумане, но с разными вкладками. Собственно, меня и запуск нескольких экземпляров ХуманРТ устраивает, но хотелось сэкономить память(каждый ХуманРТ>50Mb оперативы ест). Как оказалось, всё не так просто как я думал :) В моей проге описан класс который выполняет нужные мне действия. Eсли просто запускаем выполнение, то всё работает как надо. Попытался запустить в несколько потоков и начались проблемы. Примерно так у меня выглядит запуск потоков:
Thread myThread;
            
           
            XHEScript.browser.set_count(5);
            for (number = 0; number < 5; number++)
            {            
                
                myThread = new Thread(new ParameterizedThreadStart(StartFunc));
                myThread.Start(number); // запускаем поток
                Thread.Sleep(1000);

            }

public static void StartFunc(object x)
        {
            int nomer = (int)x;

            {                 

                myClassObject= new MyClass(nomer);

            }
В инициализацию экземпляра класса я добавил строку из примера:
XHEBaseObject.server_tab = nomer;
где nomer - номер потока. В итоге все потоки начинают работать в одной вкладке, при чем в той которая в момент запуска программы была в фокусе.
Когда я решил, что еще не дорос до потоков С#, я решил попробовать пример описанный Вами(ссылка на статью в начале этой темы). Т.е., запускаем несколько экземпляров скрипта ПХП и в каждом прописываем XHEBaseObject::server_tab=номер_вкладки. Ваш пример работает - яндекс открывается в каждой вкладке(или, если запустить отдельный скрипт с указанием номера вкладки, то именно в указанной), НО, стоит в него добавить несколько строк настройки браузера:
$browser->clear_cache();
    $browser->clear_cookies("", true, true);
    $browser->enable_java_script(true, false);
    $browser->enable_java(true, false);
    $browser->enable_popup(true, true);
    $browser->enable_frames(true, false);
    $browser->disable_proxy("all connections");
,

как начинается то же самое, что и с моей прогой на C# - навигейт происходит только во вкладке которая в данный момент в фокусе. Дальше веселее. Как я выяснил, всё что связано с $browser происходит только во вкладке в фокусе, а вот обращение к объектам DOM идет из каждого потока в правильную вкладку!!! Но, т.к. у нас везде пусто(кроме фокуса), то и остальные действия работают только в ней. Хотя "работают" - это громко сказано, т.к. остальные потоки со своим $browser лезут в ту же вкладку.

П.С. Версию обновил - ничего не изменилось.

П.П.С. Попробовал в С# в каждом потоке выполнить только browser.navigate("ya.ru") без предварительных манипуляций с настройками браузера и, как я и ожидал, во всех вкладках открылась страница яндекса.

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

Re: Про Изолированные браузеры в закладках

Сообщение bigfozzy » 01 дек 2018, 21:09

используйте XHEScriptMulti вместо XHEScript для работы в несколько Thread

PS: Посмотрите еще вот это пример - viewtopic.php?f=49&t=1294

wal
Сообщения: 39
Зарегистрирован: 16 апр 2009, 22:47

Re: Про Изолированные браузеры в закладках

Сообщение wal » 16 авг 2019, 00:40

а есть ли возможность менять папку для куков и кеша из скрипта?

было бы неплохо реализовать функционал для сохранения и быстрой смены так называемого профиля браузера(
прокси
юзер агент
разрешение экрана
язык браузера
accept language
accept
accept encoding
time zone
navigator.platform
navigator.cpuClass
referer
appName
appCodeName
appMinorVersion
product
productSub
maxTouchPoints
onTouchStart
Canvas finger print
WebGL finger print
hardwareConcurrency
deviceMemory
pluginsInfo
и т.д.)

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

Re: Про Изолированные браузеры в закладках

Сообщение Support » 16 авг 2019, 16:08

wal писал(а):
16 авг 2019, 00:40
а есть ли возможность менять папку для куков и кеша из скрипта?
// задать папку куков
$browser->set_cookies_folder($folder,$refresh=true);

// задать папку кэша
$browser->set_cache_folder($folder,$refresh=true);

wal писал(а):
16 авг 2019, 00:40
было бы неплохо реализовать функционал для сохранения и быстрой смены так называемого профиля браузера(
прокси
юзер агент
разрешение экрана
язык браузера
accept language
accept
accept encoding
time zone
navigator.platform
navigator.cpuClass
referer
appName
appCodeName
appMinorVersion
product
productSub
maxTouchPoints
onTouchStart
Canvas finger print
WebGL finger print
hardwareConcurrency
deviceMemory
pluginsInfo
и т.д.)
это тоже уже есть, вот пример из тестов:
// 1 шаг
echo "1. Зададим параметры браузера : "; 
echo $browser->set_user_agent("5Googlebot/2.1 (+http://www.google.com/bot.html)")." ";
echo $browser->set_screen_resolution(1024,768,16)." ";
echo $browser->set_language("en")."\n";

// 2 шаг
echo "2. Посмотрим парметры : ";
echo $browser->navigate("whoer.net/extended")."\n";

// 3 шаг
echo "2. Сохраним профиль : ";
echo $browser->save_profile("active_page_profile.json")."\n";

// 4 шаг
echo "4. Добавим закладку : ";
echo $browser->add_tab()."\n";

// 5 шаг
echo "5. Установим на ней тотже профиль : ";
echo $browser->load_profile("active_page_profile.json")."\n";

// 6 шаг
echo "6. Посмотрим парметры : ";
echo $browser->navigate("whoer.net/extended")."\n";


wal
Сообщения: 39
Зарегистрирован: 16 апр 2009, 22:47

Re: Про Изолированные браузеры в закладках

Сообщение wal » 16 авг 2019, 22:18

Отлично!
Большое спасибо!

когда обновите хелп? =) там ни слова про эти команды...

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

Re: Про Изолированные браузеры в закладках

Сообщение Support » 16 авг 2019, 22:40

wal писал(а):
16 авг 2019, 22:18
Отлично!
Большое спасибо!

когда обновите хелп? =) там ни слова про эти команды...
В последнем обновлении хэлпа потерялись эти команды из виду, много всего просто добавляли и обновляли, обязательно добавим в следующем обновлении.

Ответить