Xpath замена параметров в конфиге proxifier



  • 0_1498895922682_bas.ppx
    Собственно идея в том, что бы из БАСа менять конфиг проксифаера тем самым меняя проксики для проксирования процесса БАСа.

    На данный момент считываю конфиг в переменную и пытаюсь применить к ней xpath(получить текст):

    /ProxifierProfile[@version="101"]/ProxyList/Proxy[1]/Address/text()

    но получаю Can't resolve query /ProxifierProfile[@version="101"]/ProxyList/Proxy[1]/Address/text()

    во все инструментах для построения xpath запросов работает. может БАСу как-то иначе запросы кормить нужно?



  • @Sevenup Могу предложить заменить регуляркой. Так как в Xpath не силён.
    Запрос вида //*[@id="100"]/address находит первый прокси.
    //*[@id="100"]/port - находит порт у первого прокси.

    //*[@id="101"]/address - второй прокси.
    //*[@id="101"]/port - соответственно порт второго прокси.



  • Вы имеете ввиду использовать "регулярные выражения" -> "первое вхождение" и там где поле "регулярное выражение" использовать //*[@id="100"]/address верно?

    2й прокси брать нет необходимости, я привел пример 2х прокси, один с авторизацией, другой нет. т.е. это уже 2й этам задачки :) отличать необходима ли авторизация и добавлять или убирать соответствующие строки.

    Пока пытаюсь справиться с 1м этапом, просто запарсить текущие значения в конфиге, заменить их на новые и сохранить. Казалось бы все просто, а не выходит.



  • UPD:
    сорри, я понял, в Вашем примере xpath :)
    спасибо, такой вариант работает. Пытаюсь теперь понять, почему в БАС не работают выражения xpath, которые работают в чекерах и конструкторах.



  • @Sevenup Незнаю на счёт конструкторов, я 0_1498895922682_bas.ppx переименовал в _1498895922682_bas.ppx.html . Открыл в хроме и в фаербаге выбрал нужный элемент, правым кликом Copy XPath.


    Сейчас свой проект закончу и сделаю тебе тестовый с регуляркой. Логика простая, через XPath находим нужные элементы, а затем меняем их регуляркой через .replace на нужные.



  • супер, спасибо за отличный способ работы в хроме с xpath :) а то я онлайн тулзы всякие использую, ранее с xpath не приходилось работать.

    Да именно так и действую, как ты описал, сначала Xpath находим что менять, потом replace.

    к стати регулярки в БАСе например такая (?<=@).*(?=:) тоже ругается, а в любой тулзе проверки регулярок все ок. Я ей думаю определить есть ли @ в строке, если да, значит прокси с авторизацией и берем айпи+порт такой-то регуляркой, если нету, то прокси без авторизации и берем айпи+порт другой регуляркой.

    Изначально прокси имеет вид socks5://login:pass@ip:port

    P.S.
    к стати пока автор не реализовал поддержку смены прокси в проксифаере и у мну все получится, с радостью поделюсь готовым решением (функцией) с нуждающимися.



  • @Sevenup said in Xpath замена параметров в конфиге proxifier:

    На данный момент считываю конфиг в переменную и пытаюсь применить к ней xpath(получить текст):
    /ProxifierProfile[@version="101"]/ProxyList/Proxy[1]/Address/text()
    но получаю Can't resolve query /ProxifierProfile[@version="101"]/ProxyList/Proxy[1]/Address/text()

    Если юзать "xpath(получить текст)", то хвосты вида "/text()" здесь лишние ;)



  • @UA said in Xpath замена параметров в конфиге proxifier:

    @Sevenup said in Xpath замена параметров в конфиге proxifier:

    На данный момент считываю конфиг в переменную и пытаюсь применить к ней xpath(получить текст):
    /ProxifierProfile[@version="101"]/ProxyList/Proxy[1]/Address/text()
    но получаю Can't resolve query /ProxifierProfile[@version="101"]/ProxyList/Proxy[1]/Address/text()

    Если юзать "xpath(получить текст)", то хвосты вида "/text()" здесь лишние ;)

    без /text() тоже не работает



  • @Sevenup, ещё и двойной слеш "//" в самом начале нужен :)



  • @Sevenup Ты дай пример файлов, как было и как надо в итоге. А то не совсем понятно, что и на что менять..

    @UA Решил я значит перейти с любимых мной регулярок на Xpath.
    На сайте в дереве dom-элементов текст с переносом строки:

    " Fox
    										
    											"
    

    Если применять экшен Xpath получить текст, то получаешь пробел. Сработал Xpath получить xml

    //div[@class="nickname"]/text()[2]
    

    В логе получается идеально, но вот сохраняя в файл вижу:

     Fox&#13;
    										&#13;											
    

    И вот с этим мифическим элементом переноса строки &#13; ни как не получается справиться..
    trim() не помогает.

    Вернул регулярку в место Xpath, пока не придумаю как решить.



  • @Fox said in Xpath замена параметров в конфиге proxifier:

    @Sevenup Ты дай пример файлов, как было и как надо в итоге. А то не совсем понятно, что и на что менять..

    1. берем строку нашего прокси socks5://login:pass@ip:port и раскладываем на части login, pass, ip, port
    2. берем конфиг проксифаера bas.ppx и в секции <Proxy id="100" type="SOCKS5"> меняем старые параметры на полученные из строки. Если в строке логина пароля нет (прокси без авторизации) то меняем параметры в секции <Proxy id="101" type="SOCKS4">
    3. в секции:
      <Rule enabled="true">
      <Name>New</Name>
      <Applications>Worker.exe</Applications>
      <Action type="Proxy">101</Action>
      </Rule>
      меняем через какой прокси(айди) 100 или 101 проксифаер будет проксировать наш процесс БАСа worker.exe
    4. сохраняем конфиг
    5. выпоняем *.bat который рестартанет проксифаер с новым конфигом и потоки БАСа потекут через другой прокси

    почти со всем разобрался, не получаются регулярки. В любом тестере или другом ПО работает, в БАСе нет, например регулярка (?<=@).*(?=:) что бы получить айпи.



  • @Sevenup said in Xpath замена параметров в конфиге proxifier:

    почти со всем разобрался, не получаются регулярки. В любом тестере или другом ПО работает, в БАСе нет, например регулярка (?<=@).*(?=:) что бы получить айпи.

    лови
    (@?\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3})
    если сабака будет. берет ип вместе с ней
    если ее нет, берет чистый ип

    вот тут составляй



  • @Sevenup Можно сделать всё проще. Сейчас сделаю нормальный проект по замене Default.ppx и запуску без батников.



  • @Zenodrot said in Xpath замена параметров в конфиге proxifier:

    @Sevenup said in Xpath замена параметров в конфиге proxifier:

    почти со всем разобрался, не получаются регулярки. В любом тестере или другом ПО работает, в БАСе нет, например регулярка (?<=@).*(?=:) что бы получить айпи.

    лови
    (@?\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3})
    если сабака будет. берет ип вместе с ней
    если ее нет, берет чистый ип

    вот тут составляй

    так айпи же без собаки нужен :)
    а почему моя не работает? она то во всех других ПО работает, в БАСе есть особенности с регулярками?

    UPD:
    не работает эта регулярка :(
    из строки socks5://login:1234@185.158.15.11:38849 выдает 1234@185.158
    похоже засада с цифрами в пароле :)

    (?<=@)(\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}) вот так, работает везде, кроме БАС, в нем ругается "SyntaxError: Invalid regular expression: unrecognized character after (? Номер строки:2 Во время выполнения скрипта". Я не силен в регулярках, но предполагаю что как-то иначе ему кормить их нужно, не?



  • @Sevenup Я уже почти закончил, по логике. Как выглядит строчка с проксей без логина и пароля?



  • @Fox said in Xpath замена параметров в конфиге proxifier:

    @Sevenup Я уже почти закончил, по логике. Как выглядит строчка с проксей без логина и пароля?

    без авторизации: socks5://ip:port
    с авторизацией: socks5://login:pass@ip:port

    Вот так работает вроде для получение айпи универсально: (\b\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3})
    остался порт и логин/пароль если они есть



  • @Sevenup Не парься ты так, у меня уже всё готово. Только меня из за компа выгнали :D. Вернусь, оформлю и закину сюда.

    Я вынес в отдельную переменную порядковый номер прокси и номер прокси для worker.exe. Чтобы можно было использовать в цикле.



  • ок, как пустят за ПК свисти :))))
    я пока как-то вроде даже карточный домик выстроил, даже работает :) разбиваю строку через "регулярные выражения"->"разделить строку" в список(массив) из которого потом беру значения и меняю в конфиге.

    Осталось придумать как дождаться остановки всех потоков, не запуская новые, сменить прокси методом из данной темы и снова запустить потоки. Подобную темку я даже создавал уже Остановить все потоки, а потом снова запустить.



  • @Sevenup Я вернулся.
    С самим проксифаером я не работал и как именно его хочешь применять не знаю. На один поток, или на два.. сколько прокси и когда менять.. По этому сделал шаблон.
    Вынес порядковый номер прокси в переменную и порядковый номер прокси, который будет применяться к worker.exe. Да, ещё почему то BAS не работает с относительными ссылками вида %APPDATA%, а cmd в нём работает :)

    Вот Проект.
    Сами прокси можно устанавливать из файла прикрутив ресурс.



  • @Fox
    спасибо за участие! :)

    проксифаер необходим, что бы проксировать через службу ОС весь процесс запущенный в этой ОС, например часто его(проксифаер) используют чтобы проксировались плагины браузера, например флеш.

    конечно в проксифаере есть возможность передавая PID процесса заставлять только конкретный процесс проксироваться через конкретный прокси, т.е. не по имени Worker.exe через профиль как я пытаюсь реализовать в этой теме. Таким образом можно 10 потоков(Worker.exe) и плагины которые каждый пораждает проксировать через разные прокси. Это очень здорово и удобно, в зенно такая реализация есть, но пришлось изрядно их закидать багрепортами что-бы довести эту функцию до ума. Вот теперь как-то перекатился на БАС, что-то мне в нем нравится :) может опенсорц :) но что бы в нем реализовать подобное проксирование по PID, нужен автор :) Ну или возможно кому-то больше экспириенса в кодинге.

    Но данная тема о более простом и банальном способе. У проксифаера есть конфиг, в нем мы задаем, что все процессы с именем Worker.exe прокидывать через такой-то прокси. Запускаем БАС и понеслось, в проекте прокси можно не ставить, все потоки полетят через указанный прокси (проксифаер как бы перехватывает соединение). Этот конфиг из командной строки мы можем перезаливать проксифаеру по необходимости, таким способом меняя прокси. Пример: мы отработали нужные действия (порегали акки или кто чем там занимается), далее меняем конфиг(меняем прокси) и понеслась по новой уже с другим проксиком. Таким образом прыгая с проксика на проксик.

    Попытался объяснить как можно проще.

    P.S.
    так вот, касательно потоков, прокси нужно сменить только тогда, когда все процессы(запросы) в потоках закончились, что бы одна и та же кука не светилась на сайте от разных прокси. Вот как это сделать, я пока думаю.


Log in to reply