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])