Страницы: 1
ну а я не знаю, ни про женкинсы ни ноды.жс да и ладна.
Не то чтоб это сикрет, везде оно в интронэтах валяеццо, но... пичаль твоя в ntfs rights что случается с 90% искателей запуска, чего бы то ни было под system .
Во-первых, мы, конечно же, не пишем никаких вирусов. Пишем программу для внутреннего потребления.
Возможно, надо было взять готовый продукт и не мудрить. Но кто ж знал, что на таком ровном месте споткнемся?
Во-вторых, мы не из-под пользователя запускаем что-то от имени system, а наоборот, из-под system запускаем что-то, что должно иметь профиль пользователя. Права, я так понимаю, у system'а есть все?
Возникла мысль, что среды окружения как-то переписываются, т.к. из-под system firefox активно пытается достать профиль пользователя, который лежит в папке C:\Users\UserName\AppData\ (искали программой процесс монитор). Вместе с тем переменные APPDATA, LOCALAPPDATA и др указывают верно на системный профиль в папке C:\Windows\System32\config\syste
…сначала, она ищет как процессы закрывать, потом ей систем привилегии понадобились.... и скрипт какой-та питоновский в FF пихает - не иначе говнючка какого-то пишут. Чё пишем, а? зачем тебе бравзер из-под system ?
Надо забрать результаты выполнения большого Js кода, который неохота переписывать на другой язык.
Из под системс его запускает дженкинс.
PS я знаю про nodejs
Вот код питона.
[spoiler][code]HOST = 'localhost'
PORT=50011
urlPattern='http://localhost:%i/%s'
htmlPageHead="HTTP/1.1 %s\r\nServer: Our\r\nCache-Control: no-cache\r\nContent-Language: ru\r\nContent-Type: text/html; charset=utf-8\r\nContent-Length: %i\r\n\r\n"
htmlPageText="<!DOCTYPE HTML><html><head><title>%s</title></head><body><h2>%s</h2></body></html>"
import socket
sock=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind((HOST, PORT))
sock.listen(40)
sock.settimeout(10)
def receiveData(conn):
data=''
conn.settimeout(10)
try:
while True:
r_data = conn.recv(1024).decode()
data = data + r_data
if len(r_data) < 1024:
break
except Exception:
return data
return data
def connectClient(conn,addr):
data=receiveData(conn)
if data=='':
print('EMPTY DATA ')
else:
typeIndex=data.find(' ')
requestT
Здравствуйте.
Есть задача запустить firefox из скрипта питон, отработать скрипт, получить результаты по сокету. Скрипт должен запускаться под учетной записью System, где нет рабочего стола, ну или нет такого рабочего стола, который бы устроил firefox.
Firefox отказывается даже загружать первый урл на таких условиях.
Что можно изменить в настройках (в config:about очень много параметров), чтобы ФФ заработал?
ОС Windows 7
От имени system запускаю с помощью планировщика задач (команда AT). Все процессы запускаются (питон и браузер). Вывод питоновского скрипта производится в файл, по его содержимому видно, что скрипт питона отработал, а вот с клиента не пришло ни одного запроса, даже самого первого гет, который был в строке запуска браузера.
От имени обычного пользователя все отлично работает
Спасибо
Дамы и господа, я дико извиняюсь, наклеветала.
Питон прекрасно выполняет функцию закрытия окна.
Протупили с параметрами.
windll.user32.SendMessageW(3278334,16,0,0) windll.user32.SendMessageW(3278334,'WM_CLOSE',0,0) #не работает
Надо было число отправлять, а не строку.
catapulta, при любом названии вкладки, при любом, в строке присутствует буквы Mozilla Firerfox.
Перебирать окна GetWindowText на предмет наличия в строке названия букв Mozilla Firerfox и получать хендл окна.
Делать окно это активным ShowWindow и закрывать как уже сказано.
а зачем делать активным? он и так понимает по хендлу.
"Mozilla Firerfox"присутствует также и в том окне, в котором куча нужных вкладок. Я могу закрыть это окно и не закрыть то, которое нужно закрыть. Поэтому нужно знать полное название активной вкладки и я его знаю, поскольку сама же ее и запустила. Если только пользователь не переключит. Ну если переключит то пусть сам закрывает раз такой умный
Перебрать окна средствами винапи - это, наверное, можно.
А как сделать вкладку активной? в винспай я вижу только одно окно с активной вкладкой, как добраться до другой вкладки и сделать активной ее? Это нужно браузерское апи. А такого нет наверное
Мне повторюсь нужно только программное решение, не ручное.
Если речь идет о моей странице, то я знаю ее имя и я ее закрою, а если о вкладках уже открытых на начало программы, то в принципе программа запускает новое окно и мне это на руку, что предыдущее окно с сотней вкладок не закрылась. Я закрываю активную вкладку и с ней закрывается окно. Что там в процессах висит - ну и пусть висит. Будет проблема будем решать.
17-01-2018 14:21:29
А не я не так поняла. Я нашла свое окно с вкладкой и без проблем его закрыла без того, чтобы сделать активным. У меня проблема не потерять эту вкладку, поскольку только по ней я могу найти окно, а она теоретически может смениться, окно назовется по-другому и я его не найду. Ну вообще да можно просто перебрать вс
#include "Windows.h" int main(int argc, char ** argv) { if (argc == 3) SendMessage(FindWindowA(argv[1], argv[2]), WM_CLOSE, 0, 0); return 0; }
Ну да, в итоге эта программулька заработала из питона, firefox перестал ломаться.
subprocess.Popen('closeBrowser.exe "MozillaWindowClass" "LaunchPage - Mozilla Firefox"')
Спасибо за ответы.
Действительно, сейчас пишем программу на с++.
#include "Windows.h" int main(int argc, char ** argv) { HWND h = FindWindowW(L"MozillaWindowClass",L"Mozilla Firefox"); SendMessage(h, WM_CLOSE, 0, 0); return 0; }
Чтобы посмотреть какие окна открыты использую winspy. Для каждого окна есть имя и класс, для фф класс MozillaWindowClass, а имя - это имя активной вкладки и название браузера через дефис: "NamePage - Mozilla Firefox", либо "Mozilla Firefox", если вкладка пустая. Все замечательно, если я знаю имя вкладки, но как закрыть браузер перед запуском программы? Если оставить вторым параметром NULL, то работает только если вкладка одна и пустая
Склоняемся к мнению, что закрывать первый раз тасккилом либо выдвигать требование закрыть браузер перед использованием.
Но если есть какие тонкости в именовании окон, будем благодарны за совет или за ссылки.
Также остается открытым вопрос: почему из питона винапи не вызывается? Хендл окна находит верно,
Перед запуском стоит 10 секунд, перед закрытием стоит 4 секунды. Перезапускаю вручную, тоже пару секунд добавляет. Этого мало? Нужно около минуты?
ФФ закрывается тасккилом с ключами /F /T /IM (или /PID вместо /IM, и так и так пробовали).
Вкладки в браузере из js-кода можно закрыть, только если они были открыты другим окном.
Здравствуйте.
Есть задача из питоновского скрипта запустить firefox, получить из js-скрипта результат, закрыть и так предположительно бесконечное число раз по таймеру
Но браузер ломается ровно на 5 раз, иногда на 2. Говорит что firefox закрылся при запуске, предлагается запустить в безопасном режиме или очистить.
При запуске в безопасном режиме достаточно просто закрыть браузер, чтобы все наладилось, но это действие требует присутствия пользователя, а нам нужен автоматический процесс.
Версия Firefox 52.
Что пробовали:
1. отключить в настройках запуск старой сессии
2. выбрать питоновскую функцию по закрытию (kill, terminate): она без флага /f (без принудительного завершения) не нужна
3. обратится к винапи, хандл окна питон находит правильно, сообщения WM_CLOSE, WM_DESTOY, WM_QUIT, WM_NCDESTOY отправляет, но они не выполняются
4
C:\WINDOWS\system32\cmd.exe /c
.exe /f /t /im firefox.exe &cls &start firefox
найденную здесь команду пробовали, чередуя ее с тасккилом (поскольк
Страницы: 1