Здравствуйте.
Есть задача запустить 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')
И сама команда launchFirefox.cmd
Отсутствует
сначала, она ищет как процессы закрывать, потом ей систем привилегии понадобились.... и скрипт какой-та питоновский в FF пихает - не иначе удалено какого-то пишут. Чё пишем, а?
зачем тебе бравзер из-под system ?
...программисты словно войну какую-то ведут за свои обновления. Блин, почему сейчас повсюду мания ухудшать интерфейсы и делать их максимально неудобными?! Radiation
Отсутствует
сначала, она ищет как процессы закрывать, потом ей систем привилегии понадобились.... и скрипт какой-та питоновский в FF пихает - не иначе говнючка какого-то пишут. Чё пишем, а? зачем тебе бравзер из-под system ?
Надо забрать результаты выполнения большого Js кода, который неохота переписывать на другой язык.
Из под системс его запускает дженкинс.
PS я знаю про nodejs
Отредактировано catapulta (08-02-2018 14:34:59)
Отсутствует
ну а я не знаю, ни про женкинсы ни ноды.жс да и ладна.
Не то чтоб это сикрет, везде оно в интронэтах валяеццо, но... пичаль твоя в ntfs rights что случается с 90% искателей запуска, чего бы то ни было под system .
...программисты словно войну какую-то ведут за свои обновления. Блин, почему сейчас повсюду мания ухудшать интерфейсы и делать их максимально неудобными?! Radiation
Отсутствует
ну а я не знаю, ни про женкинсы ни ноды.жс да и ладна.
Не то чтоб это сикрет, везде оно в интронэтах валяеццо, но... пичаль твоя в 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, буду страшно благодарна.
Спасибо еще раз.
Отсутствует