четверг, 26 февраля 2015 г.

Забираем по фтп файлы *.bak
python3

import ftplib,sys

def getbinary(ftp, filename, outfile):
   try:
      print("retrieving file "+filename+' to -> '+outfile+"...")
      fout=open(outfile,'wb')
      ftp.retrbinary("RETR " + filename, fout.write)
      fout.close()
   except:
      print("somthing wrong! error")
      sys.exit(2)

def getpastfilenamofdir(ftp, dir):
    ftp.cwd(dir)
    pastfilename=ftp.nlst('*.bak')[-1:][0]
    getbinary(ftp, pastfilename, pastfilename)

ftp=ftplib.FTP('10.10.10.10')
ftp.login('user','password')

getpastfilenamofdir(ftp, 'folder1')
getpastfilenamofdir(ftp, '../folder2/folder3')
getpastfilenamofdir(ftp, '../../folder4')
ftp.close()

sys.exit(0)

воскресенье, 1 февраля 2015 г.

Пишем штуку для отправки файла в некую компанию. С авторизацией и конфигом ;)
Все оригинальные имена email,файлов/URLов похерены.
Используется изнутри 1С для отправки сформированного csv файла.

# -*- coding: utf8 -*-
# alex~~~@zztop.ru, 2015

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import sys,codecs
from os.path import isfile
import ConfigParser

#http://habrahabr.ru/post/117236/
def setup_console(sys_enc="utf-8"):
    reload(sys)
    try:
        if sys.platform.startswith("win"):
            import ctypes
            enc = "cp%d" % ctypes.windll.kernel32.GetOEMCP()
        else:
            enc = (sys.stdout.encoding if sys.stdout.isatty() else
                        sys.stderr.encoding if sys.stderr.isatty() else
                            sys.getfilesystemencoding() or sys_enc)

        sys.setdefaultencoding(sys_enc)

        if sys.stdout.isatty() and sys.stdout.encoding != enc:
            sys.stdout = codecs.getwriter(enc)(sys.stdout, 'replace')

        if sys.stderr.isatty() and sys.stderr.encoding != enc:
            sys.stderr = codecs.getwriter(enc)(sys.stderr, 'replace')

    except:
        pass

def recreateconf():
   try:
      f1=open('ololo.conf','w')
      f1.write("[MAIN]\nURL=http://parts.bmw.ru\nLOGIN=qwerty@mail.ru\nPASSWD=password123\nFILENAME=c:/temp/ololo.csv\nTESTMODE=on")
      f1.close()
   except:
      print u"Невозможно записать файл ololo.conf - ошибка"
      sys.exit(3)

setup_console()

if not isfile('phantomjs.exe'):
   print u"Ошибка:\n"+\
         "\tФайл PhantomJS.exe является необходимым драйвером браузера для работы программы"+"\n"+\
         "\tНайти последнюю его версию можно здесь: http://phantomjs.org/download.html"
   sys.exit(1)

if not isfile('renaultsend.conf'):
   print u"Ошибка:\n"+\
         "\tФайл ololo.conf является необходимым файлом конфигурации"+"\n"+\
         "\tПримерный файл конфигурации создан, ознакомьтесь если требуется"
   recreateconf()
   sys.exit(2)

url=''
login=''
passwd=''
filename=''
testmode='off'

try:
   cparser=ConfigParser.ConfigParser()
   cparser.read('renaultsend.conf')
   url=cparser.get('MAIN','URL')
   login=cparser.get('MAIN','LOGIN')
   passwd=cparser.get('MAIN','PASSWD')
   filename=cparser.get('MAIN','FILENAME')
   if cparser.has_option('MAIN','TESTMODE'):
      testmode=cparser.get('MAIN','TESTMODE')
except:
   print u"Ошибка:\n"+\
         "\tНевозможно прочитать файл либо неверный формат файла конфигурации ololo.conf\n"\
         "\tУдалите ololo.conf и перезапустите программу. Файл будет пересоздан"
   sys.exit(4)

try:
   driver=webdriver.PhantomJS()
   retcode=0
   driver.implicitly_wait(60)
   driver.get(url)
#вводим логи/пароль+ввод в поле пароля
   print u"Попытка отправки файла "+filename+"\n"
   driver.find_element_by_xpath('//*[@id="minWidth"]/div[2]/div/div[1]/div/form/input[1]').send_keys(login)
   driver.find_element_by_xpath('//*[@id="minWidth"]/div[2]/div/div[1]/div/form/input[2]').send_keys(passwd+Keys.ENTER)
   driver.find_element_by_xpath('//*[@id="minWidth"]/div[2]/div[2]/div[1]/div[3]/a').click()
   driver.find_element_by_xpath('//*[@id="minWidth"]/div[2]/div[2]/div[1]/a[2]').click()
   driver.find_element_by_xpath("//input[@type='file']").send_keys(filename)
   if testmode=="on": 
      try:
        driver.save_screenshot("result.jpg")
        print u"Включен testmode\n"+\
           "Скриншот с результатом последней страницы result.jpg сброшен успешно"
      except:
        print u"Внимание: не удалось сохранить скриншот result.jpg"
   else: 
      driver.find_element_by_xpath('//*[@id="minWidth"]/div[2]/div[2]/div[1]/form/input[2]').click()
except:
   print u"Непонятная ошибка с сайтом - возможно изменился контент или неверный логин/пароль.\n"+\
          "Если вы уверены что логин/пароль норм, попробуйте обратиться к разработчику alex~~~@zztop.ru ;)"
   retcode=5
finally:
   recreateconf()
   try:
       driver.quit()
   except:
       print u"Невозможно уничтожить созданный web driver, при работе произошла ошибка\n"

if retcode==0:
   print u"Все прошло успешно!"
sys.exit(retcode)