Скрипты

Websbor

Сергей Мазанов

Есть сервис https://websbor.gks.ru/online/info , который выдает список отчетности для организации по ее инн. Для сбора по нескольким организациям написал скрипт. Это эмулятор браузера. Скрипт подключается к базе MSSQL, считывает список клиентов, подставляет ИНН на сайт, и полученные таблицы сохраняет обратно в базу. Для работы необходим файл geckodriver.exe, который можно найти в интернете.

import pyodbc

from selenium.webdriver import Firefox
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time

server = 'localhost'
database = 'client'

class websbor():
    def __init__(self,INN):

        self.table = []

        browser = Firefox()
        browser.set_window_size(1440, 900)
        browser.get('https://websbor.gks.ru/online/info')
        #print(browser.page_source)

        search_form = browser.find_element(By.ID , 'inn')
        search_form.send_keys(INN)
        search_form.send_keys(Keys.RETURN);

        time.sleep (5)

        search_form = browser.find_elements(By.TAG_NAME , 'table')
        if len(search_form)>1:
            search_rows = search_form[1].find_elements(By.TAG_NAME , 'td')
            i=0
            datablock=[]
            for sr in search_rows:
                i+=1
                datablock.append(sr.text)
                if i%8 == 0:
                    self.table.append(datablock)
                    datablock=[]
        time.sleep (3)

        browser.close()

class FetchClients():
    def __init__(self):
        self.clientlist=[]
        cnxn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER=' + server + ';DATABASE=' + database + ';Trusted_Connection=yes;')
        cursor = cnxn.cursor()

        cursor.execute("SELECT Код, ИНН from Клиенты")
        row = cursor.fetchone()
        while row:
            self.clientlist.append([row[1],row[0]])

            row = cursor.fetchone()

        cursor.close
        cnxn.close

class SaveData():
    def __init__ (self,clientdata,OrgCode):
        if len(clientdata)>0:

            cn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER=' + server + ';DATABASE=' + database + ';Trusted_Connection=yes;')
            cur = cn.cursor()

            for onerow in clientdata:
                count = cur.execute("""
                INSERT INTO [Росстат входящая] ([КодКлиента],[КодОтчета],[НазваниеОтчета],[Периодичность],[Срок],[Период],[Примечание], ОКУД)  
                VALUES (?,?,?,?,?,?,?,?)""",
                OrgCode,onerow[0],onerow[1],onerow[2],onerow[3],onerow[4],onerow[5],onerow[6])
            cn.commit()
            cn.close


if __name__ == "__main__":
    clt = FetchClients()
    for cl in clt.clientlist:
        print(cl[0],cl[1])
        a= websbor(cl[0])
        b= SaveData(a.table,cl[1])