Здравствуйте.
Есть задача запустить firefox из скрипта питон, отработать скрипт, получить результаты по сокету. Скрипт должен запускаться под учетной записью System, где нет рабочего стола, ну или нет такого рабочего стола, который бы устроил firefox.
Firefox отказывается даже загружать первый урл на таких условиях.
Что можно изменить в настройках (в config:about очень много параметров), чтобы ФФ заработал?
ОС Windows 7
От имени system запускаю с помощью планировщика задач (команда AT). Все процессы запускаются (питон и браузер). Вывод питоновского скрипта производится в файл, по его содержимому видно, что скрипт питона отработал, а вот с клиента не пришло ни одного запроса, даже самого первого гет, который был в строке запуска браузера.

От имени обычного пользователя все отлично работает

Спасибо

Вот код питона.

скрытый текст

Выделить код

Код:

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(' ')
        requestType=data[0:typeIndex]
        print('requestType',requestType)        
        txt=htmlPageText%('Firefox','Firefox the Best')
        answer=htmlPageHead%('200 OK',len(txt))+txt                   
        conn.send(answer.encode())
    conn.close()    

from ctypes import windll
windll.Shell32.ShellExecuteW(0,'open',"C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe",urlPattern%(PORT,'start.html'),0,5)

while True:
    try:
        (conn,addr)=sock.accept()
        connectClient(conn,addr)       
    except Exception:
        print('TIMEOUT')
        break
sock.close()
print('THE END')


Команда назначения запуска браузера из-под учетки system

Выделить код

Код:

AT 14:10 "D:\launchFirefox.cmd"

И сама команда launchFirefox.cmd

Выделить код

Код:

D:
cd D:\python
call python launchFirefox.py >> launchFirefox.txt

сначала, она ищет как процессы закрывать, потом ей систем привилегии понадобились.... и скрипт какой-та питоновский в FF пихает - не иначе удалено какого-то пишут. Чё пишем, а?
зачем тебе бравзер из-под system ?

mokujin пишет

сначала, она ищет как процессы закрывать, потом ей систем привилегии понадобились.... и скрипт какой-та питоновский в FF пихает - не иначе говнючка какого-то пишут. Чё пишем, а? зачем тебе бравзер из-под system ?

Надо забрать результаты выполнения большого Js кода, который неохота переписывать на другой язык.
Из под системс его запускает дженкинс.
PS я знаю про nodejs

ну а я не знаю, ни про женкинсы ни ноды.жс  да и ладна.
Не то чтоб это сикрет, везде оно в интронэтах валяеццо, но...  пичаль твоя в ntfs rights что случается с 90% искателей запуска, чего бы то ни было под system .

mokujin пишет

ну а я не знаю, ни про женкинсы ни ноды.жс  да и ладна.
Не то чтоб это сикрет, везде оно в интронэтах валяеццо, но...  пичаль твоя в ntfs rights что случается с 90% искателей запуска, чего бы то ни было под system .

Во-первых, мы, конечно же, не пишем никаких вирусов. Пишем программу для внутреннего потребления.
Возможно, надо было взять готовый продукт и не мудрить. Но кто ж знал, что на таком ровном месте споткнемся?

Во-вторых, мы не из-под пользователя запускаем что-то от имени system, а наоборот, из-под system  запускаем что-то, что должно иметь профиль пользователя. Права, я так понимаю, у system'а есть все?

Возникла мысль, что среды окружения как-то переписываются, т.к. из-под system firefox активно пытается достать профиль пользователя, который лежит в папке C:\Users\UserName\AppData\ (искали программой процесс монитор). Вместе с тем переменные APPDATA, LOCALAPPDATA и др указывают верно на системный профиль в папке C:\Windows\System32\config\systemprofile\AppData .

Было много всяких ситуаций: есть профиль в системной папке, нет, требует только системный, требует только пользовательский, требует и то и другое. То ничего в питон не приходит, то приходит эмпти дата (т.е. соединение было разорвано, и что-то все-таки долетело).  Отключали брандмауэр и не отключали. Пробовали на windows 7 и  windows 10.

Факт в том, что конкретно получить выход (т.е. гет запрос на стороне питона) можно только, если запустить ФФ в видимом режиме.
Если планировщиком (команда schtasks) запустить от имени пользователя с ключом /IT (интерактивный режим), то окна запускаются явно, и все отрабатывает.
Таким образом возникает два вопроса:
1 Firefox принципиально запрещает запросы урл в случае, если нет у приложения окна?
2 Как из-под дженкинса запустить явный процесс под пользователем, schtasks не подходит, т.к. в консоль дженкинса выведется сообщение о запуске задачи, ценная информация выведется в консоль назначенной задачи. Хотя запустить скрипт таким образом получилось

В интернете под "firefox в фоновом режиме" понимается многопоточность браузера, а не то что ФФ запустится без окна
Пытались запустить ФФ под новым профилем. И кстати если при запуске профиль не указать, то браузер запускается в автономной режиме и действительно ничего не отправляет наружу.

Может есть у кого какие мысли идеи, кто хорошо знает firefox, буду страшно благодарна.
Спасибо еще раз.