RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / user-493826

Михаил Ширшов's questions

Martin Hope
Михаил Ширшов
Asked: 2025-02-12 16:03:27 +0000 UTC

API NSPD。数据输出问题

  • 4

这是代码

import httpx
from datetime import datetime
import asyncio

async def fetch_data(url, client):
    """Функция для асинхронного получения данных по URL с повторными попытками"""
    response = await client.get(url, timeout=30)
    await asyncio.sleep(2)
    if response.status_code == 200:
        return response.json()

async def api_nspd_json(code):
    result_parts_zu = None
    objectsList = None
    result_string = None
    pomList = None
    mashList = None
    landLinks = None
    buildParts = None
    permissionType = None
    result = {}
    code = code.replace(':', '%3A')
    url = f'https://nspd.gov.ru/api/geoportal/v2/search/geoportal?thematicSearchId=1&query={code}'

    async with httpx.AsyncClient(verify=False) as client:
        response_data = await fetch_data(url, client)
        
        if not response_data or 'data' not in response_data or 'features' not in response_data['data']:
            result['message'] = 'Объект не найден в НСПД, возможно снят с учета или ввели не правильно кадастровый номер.'
            return result, result_parts_zu, objectsList, result_string, pomList, mashList, landLinks, buildParts, permissionType
        
        coordinates = 'Без координат'
        for feature in response_data['data']['features']:
            if feature['geometry']['type'] == 'Polygon':
                coordinates = 'С координатами'

        properties = response_data['data']['features'][0]['properties']['options']
        feature_id = response_data['data']['features'][0]['id']
        category_id = response_data['meta'][0]['categoryId']
        
        async def get_tab_values(url):
            tab_data = await fetch_data(url, client)
            print(tab_data)
            if not tab_data:
                return "Нет данных"
            title = tab_data.get("title", "Нет заголовка")
            values = tab_data.get("value", [])
            values = [value for value in values if value]
            return f"{title}: <code>{', '.join(values)}</code>" if values else "Нет данных"

        if category_id == 36368:  # ЗУ
            result_parts_zu = await get_tab_values(f'https://nspd.gov.ru/api/geoportal/v1/tab-values-data?tabClass=landParts&categoryId={category_id}&geomId={feature_id}')
            objectsList = await get_tab_values(f'https://nspd.gov.ru/api/geoportal/v1/tab-group-data?tabClass=objectsList&categoryId={category_id}&geomId={feature_id}')
        elif category_id == 36384:  # ОНС
            landLinks = await get_tab_values(f'https://nspd.gov.ru/api/geoportal/v1/tab-values-data?tabClass=landLinks&categoryId=36384&geomId={feature_id}')
        elif category_id == 36383:  # Сооружения
            pomList = await get_tab_values(f'https://nspd.gov.ru/api/geoportal/v1/tab-values-data?tabClass=landLinks&categoryId=36383&geomId={feature_id}')
            mashList = await get_tab_values(f'https://nspd.gov.ru/api/geoportal/v1/tab-values-data?tabClass=buildParts&categoryId=36383&geomId={feature_id}')
            buildParts = await get_tab_values(f'https://nspd.gov.ru/api/geoportal/v1/tab-values-data?tabClass=permissionType&categoryId=36383&geomId={feature_id}')
        elif category_id == 36369:  # ОКС
            permissionType = await get_tab_values(f'https://nspd.gov.ru/api/geoportal/v1/tab-values-data?tabClass=permissionType&categoryId=36369&geomId={feature_id}')

        for key, value in properties.items():
            if key == 'registersId' and value == 36440:
                result_string = await get_tab_values(f'https://nspd.gov.ru/api/geoportal/v1/tab-values-data?tabClass=compositionLand&objdocId={feature_id}&registersId=36440')
            elif key == 'registersId' and value == 36441:
                landLinks = await get_tab_values(f'https://nspd.gov.ru/api/geoportal/v1/tab-values-data?tabClass=landLinks&objdocId={feature_id}&registersId=36441')
                objectsList = await get_tab_values(f'https://nspd.gov.ru/api/geoportal/v1/tab-group-data?tabClass=objectsList&objdocId={feature_id}&registersId=36441')
            elif key == 'registersId' and value == 36453:
                landLinks = await get_tab_values(f'https://nspd.gov.ru/api/geoportal/v1/tab-values-data?tabClass=landLinks&objdocId={feature_id}&registersId=36453')
                buildParts = await get_tab_values(f'https://nspd.gov.ru/api/geoportal/v1/tab-values-data?tabClass=buildParts&objdocId={feature_id}&registersId=36453')

            if isinstance(value, str):
                if len(value) == 10 and value[4] == '-' and value[7] == '-':
                    date_obj = datetime.strptime(value, '%Y-%m-%d')
                    formatted_date = date_obj.strftime('%d.%m.%Y')
                    result[key] = formatted_date
                elif len(value) == 20 and value[10] == 'T' and value[-1] == 'Z':
                    date_obj = datetime.strptime(value, '%Y-%m-%dT%H:%M:%SZ')
                    formatted_date = date_obj.strftime('%d.%m.%Y')
                    result[key] = formatted_date
                elif isinstance(value, list):
                    result[key] = ', '.join(value) if value else None
                elif value not in [None, ""]:
                    result[key] = value
        
        result['coordinates'] = coordinates
    return result, result_parts_zu, objectsList, result_string, pomList, mashList, landLinks, buildParts, permissionType



async def main():
    result = await api_nspd_json("52:51:0010002:1139")
if __name__ == '__main__':
    asyncio.run(main())

地籍号 52:51:0010002:1139 是一栋包含房屋的公寓楼。主要 API 是

code = code.replace(':', '%3A')
    url = f'https://nspd.gov.ru/api/geoportal/v2/search/geoportal?thematicSearchId=1&query={code}'

您可以通过它从 NSPD 中获取其他数据: 在此处输入图片描述

在代码中是这样写的(我马上就说这些并不是所有的链接,将来我会“剪切”代码):

if category_id == 36368:  # ЗУ
            result_parts_zu = await get_tab_values(f'https://nspd.gov.ru/api/geoportal/v1/tab-values-data?tabClass=landParts&categoryId={category_id}&geomId={feature_id}')
            objectsList = await get_tab_values(f'https://nspd.gov.ru/api/geoportal/v1/tab-group-data?tabClass=objectsList&categoryId={category_id}&geomId={feature_id}')
        elif category_id == 36384:  # ОНС
            landLinks = await get_tab_values(f'https://nspd.gov.ru/api/geoportal/v1/tab-values-data?tabClass=landLinks&categoryId=36384&geomId={feature_id}')
        elif category_id == 36383:  # Сооружения
            pomList = await get_tab_values(f'https://nspd.gov.ru/api/geoportal/v1/tab-values-data?tabClass=landLinks&categoryId=36383&geomId={feature_id}')
            mashList = await get_tab_values(f'https://nspd.gov.ru/api/geoportal/v1/tab-values-data?tabClass=buildParts&categoryId=36383&geomId={feature_id}')
            buildParts = await get_tab_values(f'https://nspd.gov.ru/api/geoportal/v1/tab-values-data?tabClass=permissionType&categoryId=36383&geomId={feature_id}')
        elif category_id == 36369:  # ОКС
            permissionType = await get_tab_values(f'https://nspd.gov.ru/api/geoportal/v1/tab-values-data?tabClass=permissionType&categoryId=36369&geomId={feature_id}')

        for key, value in properties.items():
            if key == 'registersId' and value == 36440:
                result_string = await get_tab_values(f'https://nspd.gov.ru/api/geoportal/v1/tab-values-data?tabClass=compositionLand&objdocId={feature_id}&registersId=36440')
            elif key == 'registersId' and value == 36441:
                landLinks = await get_tab_values(f'https://nspd.gov.ru/api/geoportal/v1/tab-values-data?tabClass=landLinks&objdocId={feature_id}&registersId=36441')
                objectsList = await get_tab_values(f'https://nspd.gov.ru/api/geoportal/v1/tab-group-data?tabClass=objectsList&objdocId={feature_id}&registersId=36441')
            elif key == 'registersId' and value == 36453:
                landLinks = await get_tab_values(f'https://nspd.gov.ru/api/geoportal/v1/tab-values-data?tabClass=landLinks&objdocId={feature_id}&registersId=36453')
                buildParts = await get_tab_values(f'https://nspd.gov.ru/api/geoportal/v1/tab-values-data?tabClass=buildParts&objdocId={feature_id}&registersId=36453')

通过地籍编号 52:51:0010002:1139,我找到了键(如果存在)'registersId'等于 36441,在这种情况下,请求是通过链接发出的

elif key == 'registersId' and value == 36441:
                landLinks = await get_tab_values(f'https://nspd.gov.ru/api/geoportal/v1/tab-values-data?tabClass=landLinks&objdocId={feature_id}&registersId=36441')
                objectsList = await get_tab_values(f'https://nspd.gov.ru/api/geoportal/v1/tab-group-data?tabClass=objectsList&objdocId={feature_id}&registersId=36441')

并通过引用objectsList应该提供与建筑物相关的处所的信息(它们位于NSPD本身中),但它在代码中给出了它

async def get_tab_values(url):
            tab_data = await fetch_data(url, client)
            print(tab_data)

由于某种原因,一开始为 None(第一次请求时出现错误 505),然后(好像在重复连接时)数据本身 {'title': '对象列表', 'object': [{'title': '房间(数量)', 'value': ['4']}, {'title': '停车位(数量)', 'value': ['']}, {'title': '房间(列表)', 'value': ['52:51:0010002:1374', '52:51:0010002:1375', '52:51:0010002:1376', '52:51:0010002:1377']}, {'title': '停车位(列表)','值':['']}]}。这个 None 破坏了一切,我通过明确的等待、通过反复的重新连接来处理它,但它仍然先给出 None 然后再给出数据。

None 如何处理?请帮忙

后来我制作了一个带有内联按钮和回调的机器人,当请求时,它不会显示带有房间的按钮(因为这个 None )

python
  • 1 个回答
  • 95 Views
Martin Hope
Михаил Ширшов
Asked: 2024-11-12 19:34:51 +0000 UTC

如何在 VBA for Excel 中创建针对 SQLite 数据库的查询并检索数据?

  • 5

这是我的代码:

    Sub GetCadastralInfo()
    Dim dbPath As String
    Dim cadNumber As String
    Dim conn As Object
    Dim rs As Object
    Dim sql As String
    Dim result As Variant
    Dim i As Integer

    On Error GoTo ErrorHandler

    dbPath = "C:\my_python\Bot_aio\akt\egrn_kpt.db"
    
    cadNumber = Trim(ActiveCell.Value) ' Удалить лишние пробелы
    
    ' Соединение
    Set conn = CreateObject("ADODB.Connection")
    Set rs = CreateObject("ADODB.Recordset")
    
    ' Откройте соединение с базой данных
    conn.Open "Driver={SQLite3 ODBC Driver};Database=" & dbPath & ";"
    
    ' SQL запрос для поиска информации по кадастровому номеру
    sql = "SELECT value_by_document FROM ZY WHERE cad_n = '" & cadNumber & "';"
    
    ' Выполните запрос и получите набор записей
    Set rs = conn.Execute(sql)
    
    ' Инициализация переменной строки
    i = 1 ' Начинаем с первой строки
    
    ' Проверка наличия данных
    If Not rs.EOF Then
        While Not rs.EOF
            Cells(i, 1).Value = rs.Fields(0).Value
            ' Если у вас есть второе поле, убедитесь, что оно существует
            If rs.Fields.Count > 1 Then
                Cells(i, 2).Value = rs.Fields(1).Value
            End If
            i = i + 1
            rs.MoveNext
        Wend
    Else
        MsgBox "Нет данных для данного кадастрового номера.", vbInformation
    End If
    
    ' Закрытие набора записей и соединения
    rs.Close
    conn.Close

    Exit Sub

ErrorHandler:
    MsgBox "Ошибка: " & Err.Description, vbCritical, "Ошибка"
    If Not rs Is Nothing Then
        If rs.State = 1 Then rs.Close ' Закрываем, если открыто
    End If
    If Not conn Is Nothing Then
        If conn.State = 1 Then conn.Close ' Закрываем, если открыто
    End If
End Sub

由于某种原因,它不断显示:“该地籍号码没有数据。”,尽管数据库在ZY表中有一个条目(这些是土地),并且我想要value_by_document列(这是土地的 VRI,例如 - “用于运行个人附属地块”)。因此,在单元格 A1 中(例如),我输入地籍号码(例如 - “52:15:0140112:10”),然后按组合键ctrl+f8并执行此代码,它显示没有数据。SQLite ODBC 驱动程序是从网站安装的。我想编写可以访问数据库的代码。请帮忙。

excel
  • 2 个回答
  • 48 Views
Martin Hope
Михаил Ширшов
Asked: 2024-08-23 16:04:04 +0000 UTC

隐藏电报机器人内联按钮上的链接

  • 5

有没有办法隐藏电报内联按钮中的链接(url)或者也许有一些解决方法?这是我的代码:

async def genmarkup_year(date_formation, url):
    markup = InlineKeyboardMarkup()
    markup.row_width = 2
    unique_dates = set()
    buttons = []
    for row in date_formation:
        date_obj = s.datetime.strptime(row, "%d.%m.%Y")
        year = date_obj.year
        if year not in unique_dates:
            unique_dates.add(year)
            buttons.append(InlineKeyboardButton(year, callback_data=str(year)))
    markup.add(*buttons)
    if url is not None:
        response = requests.get(url)
        if response.status_code == 200:
            markup.add(InlineKeyboardButton("Открыть ссылку", url=url))
    return markup

这样,当您按下某个键时,链接会打开,但是当您将鼠标悬停在该键上时,链接不会出现,并且无法执行此操作:右键单击电报中的内联按钮,并且没有“复制链接”菜单。请帮忙))

python
  • 1 个回答
  • 21 Views
Martin Hope
Михаил Ширшов
Asked: 2024-05-15 16:52:36 +0000 UTC

ChromeDriver 和 Google Chrome 不同版本

  • 5

我面临着一个持续的问题,ChromeDriver 的版本(例如版本 114.0.5735.90,请参阅链接)和 Google Chrome(例如版本 114.0.5735.91)彼此略有不同。

这就是为什么它总是给出错误:

在此输入图像描述

有时重新安装 Google Chrome 会有所帮助,然后在安装 Google Chrome 时“破坏”“GoogleUpdate”文件;该文件最终位于“C:\Program Files (x86)\Google\Update”中,因此浏览器不会更新。它可以帮助一段时间,但随后又会出现相同的错误。差异始终是一位数。

怎么处理,需要做什么,请告诉我。

google-chrome
  • 1 个回答
  • 20 Views
Martin Hope
Михаил Ширшов
Asked: 2024-05-14 15:33:50 +0000 UTC

关于 Yandex 地图、矢量图形对象的问题

  • 5

我不知道该标题还能叫什么,也许是 Yandex 地图上的矢量图形对象。

当您点击 Yandex地图时,选择“Northern Garden Partnership”及其在地图上的红色边框(细线)。当您使用组合键 Ctrl + SHIFT + I 时,开发人员工具打开,在其中我们查找“data-feature-id”,它会立即显示一些坐标:

<path data-feature-id="307db82e-ddde-4d10-9bad-bcb376f00998" d="M129.3385365770664,7.907141776755452 L140.05731346621178,-32.80068480223417 L148.58573159924708,-51.33519031479955 L191.69385604350828,-120.81939050555229 L252.9306944438722,-195.80648103822023 L371.62949764332734,49.545376885682344 L312.8626382665243,92.79101483244449 L318.87447399809025,87.036247654818 L286.11229942156933,46.75258550886065 L235.08160075522028,72.39539592619985 L233.82330955355428,87.71327962912619 L197.56588164321147,112.42484792042524 L130.08419062173925,18.65527504775673 Z" stroke-opacity="0.7" stroke="#d54747"></path>

我认为这正是我所需要的,但是坐标“M129.3385365770664,7.907141776755452 L140.05731346621178,-32.80068480223417”是什么。它们在哪里使用,它们叫什么,它们可以转换为 WGS84 坐标系还是可以使用这些坐标(用于在地图上绘图)。

яндекс-карты
  • 1 个回答
  • 17 Views
Martin Hope
Михаил Ширшов
Asked: 2024-04-25 19:51:58 +0000 UTC

硒问题。如果页面的代码结构发生变化,则查找页面上的元素

  • 5

我希望我正确地问了这个问题。我附上了我保存的个人帐户的链接,希望它能打开。

我需要通过 id="react-select-16-input" 找到页面上的输入元素(这是“对象选择” -> 对面是地籍号码输入字段,这就是我需要找到的)。问题是每次 id="react-select-16-input" 都会更改为随机数(不是 16,而是 4 或 20 等)。

当你打开文件时,页面上的 id="react-select-16-input" 元素是这样的: 在此输入图像描述

我正在考虑这样做,找到 class="rros-ui-lib-dropdown__value-container css-1hwfws3" 元素,该元素位于我需要的元素上方(如果您查看浏览器中的开发人员工具),然后使用它从 id="react-select-16-input" (即“react-select-”)中查找部分文本,它找到它,但不想输入或接受它(一般来说 send_keys('52: 18:0060182:759'))。它给出了错误“selenium.common.exceptions.ElementNotInteractableException:消息:元素不可交互”,特别是在 send_keys('52:18:0060182:759') 上

这是我的代码

element = browser.find_element(By.CSS_SELECTOR, '#realEstateItems > div > div.real-estate-selector-base > div > label > div > div.rros-ui-lib-dropdown-container.css-2b097c-container > div > div.rros-ui-lib-dropdown__value-container.css-1hwfws3')
if element.find_element(By.XPATH, '//*[contains(@id,"react-select-")]'):
   print('yes')
   element.send_keys('52:18:0060182:759')

请帮帮我

python
  • 1 个回答
  • 26 Views
Martin Hope
Михаил Ширшов
Asked: 2024-04-22 14:45:15 +0000 UTC

关于Excel公式的问题。我们需要计算其他列中带有条件的唯一记录的数量

  • 6

从 A 到 C 列中有记录,您需要计算 A 列中唯一记录的数量,条件是 B 列中有条目“第 6 列”或“第 7 列”,以及 C 列“ 2024 年 4 月”。

我写了这些公式:

  Данная формула выдает не правильное количество 36.4 (в приложенной таблице выделено зеленым)
=СУММПРОИЗВ((($B$2:$B$178="Графа 6")+($B$2:$B$178="Графа 7"))*($C$2:$C$178="Апрель_2024")*(1/СЧЁТЕСЛИ($A$2:$A$178;$A$2:$A$178)))
 
  Эта формула массива, выдает правильное количество 82, без дублей в колонке A (но тут не учитываются "Графа 6" ИЛИ "Графа 7"
=СУММ(ЕСЛИ(ИЛИ(B2:B178="Графа 6";B2:B178="Графа 7";C2:C178="Апрель_2024");(1/СЧЁТЕСЛИ($A$2:$A$178;$A$2:$A$178));0))
  Эта формула обычная (не массив), выдает тот же результат что и выше (формула массива)
=СУММПРОИЗВ(((C2:C178="Апрель_2024"))*(1/СЧЁТЕСЛИ($A$2:$A$178;$A$2:$A$178)))
  Обе формулы закрашены желтым в приложенной таблице

一般来说,附表G列还有其他公式,但是数字76形式的结果不起作用。例如,在附表中,我在 M 列中显示了 A 列中的所有记录(在 B 列中具有条目“第 6 列”或“第 7 列”)并绘制了重复记录,在 P 列中,我仅显示了唯一的记录M 列中的记录(没有重复项),我这样做是为了显示唯一记录的数量 76 条,这正是需要实现的结果。

我正在附上表格

请帮我改正或写出公式

excel
  • 1 个回答
  • 34 Views
Martin Hope
Михаил Ширшов
Asked: 2023-12-18 20:28:43 +0000 UTC

关于geojson的问题

  • 4

我自己根据Rosreestr的KPT制作了一个geojson,并在“Yandex Map Constructor”中绘制了它,这里是地图的链接。第一个问题是,在创建 geojson 时,如何制作一个具有完全透明填充的多边形,以便您可以在地图上(多边形内部)“戳”它,我读到“fill-opacity”:0就是这样做的,但它不起作用?第二个问题,有些地块有多个轮廓,你可以在地图上找到混乱的线条,我认为你需要基于这些创建一个多多边形,我的想法是否正确(至少在方向上)?这是我用来制作 geojson 的代码:

import geojson
import pandas as pd

excel_file = r'F:\python_1\non-contractual\geo_KPT.xlsx'
df = pd.read_excel(excel_file)

feature_collection = geojson.FeatureCollection([])

coords_dict = {}
for i, row in df.iterrows():
    kad_num = row['Кадастровый номер']
    x = row['Координаты x']
    y = row['Координаты y']

    if kad_num in coords_dict:
        coords_dict[kad_num].append([y, x])
    else:
        coords_dict[kad_num] = [[y, x]]

for kad_num, coords_list in coords_dict.items():
    feature = geojson.Feature(
        geometry=geojson.Polygon([coords_list]),
        properties={"description": f"{kad_num}",
                    "fill":"#ff931e",
                    "fill-opacity":0,
                    "stroke":"#e6761b",
                    "stroke-width":"1",
                    "stroke-opacity":0.9}
    )
    feature_collection['features'].append(feature)

with open(r'F:\python_1\non-contractual\geojson\1.geojson', 'w') as f:
    geojson.dump(feature_collection, f)

下面是“Yandex Map Designer”的屏幕截图,多边形的特征: 在此输入图像描述

python
  • 1 个回答
  • 34 Views
Martin Hope
Михаил Ширшов
Asked: 2023-12-14 21:40:41 +0000 UTC

不输出 xml 中的所有元素

  • 5

我需要从 Rosreestr KPT 的 xml 中在一列中显示所有具有坐标的地籍编号,第二列和第三列是坐标本身(x 和 y)。接下来是代码:

from bs4 import BeautifulSoup
from pathlib import Path
import pandas as pd

def ordinates(ordinates):
    ordinate_list = []
    for x in ordinates:
        cad_number = [s.find('cad_number').text for s in x.find_all('common_data')
        # for ordinate in x.find_all('ordinate'):
        xx = [cad.text for cad in x.find_all('x')]
        yy = [cad.text for cad in x.find_all('y')]
        ordinate_list.extend([(d,f,a) for d,f,a in zip(cad_number,xx,yy)])
    
    return ordinate_list

for path in Path(file_path).rglob('*.XML'):
    with open(path, 'r', encoding='utf-8') as parse:
        xml = parse.read()
        soup = BeautifulSoup(xml, features="lxml")
        ordinate = ordinates(soup.find_all('base_data'))
        for k in ordinate:
            data = {'Кадастровый номер':k[0],
                    'Координаты по X': k[2],
                    'Координаты по Y': k[2]}

显示以下信息(1个地籍编号和1个x和y坐标,尽管这些坐标的地籍编号可能有,例如9个)。然后是以下版本的代码:

def ordinates(ordinates):
    ordinate_list = []
    value_list_1 = []
    for x in ordinates:
        cad_number = ([s.find('cad_number').text for s in x.find_all('common_data')])
        value_list = ([s.find('value').text for s in x.find_all('common_data')])
        value_list_1.extend([(v,b) for v,b in zip(cad_number,value_list)])
        for ordinate in x.find_all('ordinate'):
            xx = [cad.text for cad in ordinate.find_all('x')]
            yy = [cad.text for cad in ordinate.find_all('y')]
            ordinate_list.extend([(d,f) for d,f in zip(xx,yy)])
     
    return ordinate_list

for path in Path(file_path).rglob('*.XML'):
    with open(path, 'r', encoding='utf-8') as parse:
        xml = parse.read()
        soup = BeautifulSoup(xml, features="lxml")
        ordinate = ordinates(soup.find_all('base_data'))
        for k in ordinate:
            data = {'Кадастровый номер':k[0],
                    'Вид объекта':k[1]}

这里 def ordords 函数显示所有坐标(如果你输入 return itude_list)或所有地籍数字(如果你输入 return value_list_1),但是如何同时输出所有内容并将其写入:

data = {'Кадастровый номер':k[0],
        'Координаты по X': k[2],
        'Координаты по Y': k[2]}

链接到 xml 格式的 CBT

python
  • 2 个回答
  • 44 Views
Martin Hope
Михаил Ширшов
Asked: 2023-11-07 20:57:48 +0000 UTC

使用 selenium 模块在一个浏览器中处理数据库中的多条记录

  • 5

首先我将展示代码:

async def click_one(browser):
    actions = ActionChains(browser)
    actions.send_keys(Keys.DOWN).perform()
    actions.send_keys(Keys.ENTER).perform()

async def wait_for_element(browser, locator, timeout: int = 1000):
    wait = WebDriverWait(browser, timeout)
    element = wait.until(EC.presence_of_element_located(locator))
    return element

async def requests():
    async with aiosqlite.connect(db_path) as conn:
        async with conn.cursor() as cursor:
            await cursor.execute("SELECT cad_n, id, name FROM requests WHERE comment='Запросить'")
            results = await cursor.fetchall()
            for result in results:
                service = Service(chromedriver_path)
                options = Options()
                options.add_experimental_option('excludeSwitches', ['enable-logging'])
                options.add_experimental_option("detach", True)
                options.add_argument("start-maximized")
                options.add_extension(browser_plug_in)
                browser = webdriver.Chrome(service=service, options=options)
                browser.get('https://lk.rosreestr.ru/eservices/request-info-from-egrn/real-estate-object-or-its-rightholder')
                await asyncio.sleep(5)
                if (await wait_for_element(browser, (By.XPATH, '//*[@id="login"]'))):
                        (await wait_for_element(browser, (By.XPATH, '//*[@id="login"]'))).send_keys(LOGIN)
                        (await wait_for_element(browser, (By.XPATH, '//*[@id="password"]'))).send_keys(PASSWORD)
                        (await wait_for_element(browser,(By.CSS_SELECTOR, 'body > esia-root > div > esia-login > div > div.form-container.outline-none > form > div:nth-child(4) > button'))).click()
                        await asyncio.sleep(5)
                if (await wait_for_element(browser,(By.XPATH, '/html/body/esia-root/div/esia-login/div/div/esia-enter-mfa/esia-otp/div/form/div/esia-code-input/div/code-input/span[1]/input'))):
                    await bot.send_message(1920542702, 'Введи код из СМС')
                    await asyncio.sleep(5)
                    while True:
                        if (await wait_for_element(browser, (By.XPATH, '//*[@id="personal-cabinet-root"]/div/div[1]/div/div/div[2]/button[2]'))):
                            await asyncio.sleep(5)
                            break
                        await asyncio.sleep(5)
                await requests_v(browser=browser, result=result, conn=conn, cursor=cursor)
            if len(results) == 0:
                pass

async def requests_v(browser,result,conn,cursor):
    await asyncio.sleep(5)
    (await wait_for_element(browser, (By.CSS_SELECTOR, '#personal-cabinet-root > div > div.login-page > div > div > div.role-selector__list > button:nth-child(2)'))).click()
    (await wait_for_element(browser,(By.XPATH, '//*[@id="applicantCategory"]'))).send_keys('Органы государственной статистики')
    await click_one(browser)
    (await wait_for_element(browser,(By.XPATH, '//*[@id="rorganizationOrGovernmentArray[0].regDate"]'))).send_keys('09.11.2015')
    (await wait_for_element(browser,(By.XPATH, '//*[@id="userAuthorityConfirmationDocument.documentType"]'))).send_keys('Доверенность')
    await click_one(browser)
    (await wait_for_element(browser,(By.XPATH, '//*[@id="userAuthorityConfirmationDocument.documentNumber"]'))).send_keys('Сл-60/23')
    (await wait_for_element(browser,(By.XPATH, '//*[@id="userAuthorityConfirmationDocument.documentIssueDate"]'))).send_keys('22.03.2023')
    (await wait_for_element(browser,(By.XPATH, '//*[@id="userAuthorityConfirmationDocument.issuingAuthority"]'))).send_keys('Министерство')
    (await wait_for_element(browser,(By.CSS_SELECTOR, '#userAuthorityConfirmationDocument\.file'))).send_keys(filePath)
    (await wait_for_element(browser,(By.CSS_SELECTOR, '#userAuthorityConfirmationDocument\.signature'))).send_keys(filesig)
    (await wait_for_element(browser,(By.CSS_SELECTOR, '#react-select-4-input'))).send_keys(result[0])
    await asyncio.sleep(5)
    await click_one(browser)
    (await wait_for_element(browser,(By.XPATH, '//*[@id="react-select-6-input"]'))).send_keys('Выписка из Единого государственного реестра недвижимости об объекте недвижимости')
    await click_one(browser)
    (await wait_for_element(browser,(By.XPATH, '//*[@id="requestAboutObject.deliveryActionEmail"]'))).send_keys('@yandex.ru')
    (await wait_for_element(browser,(By.XPATH, '//*[@id="realEstateItems"]/div/div[2]/div/label/div/div[1]/div/div[2]/div[2]'))).click()
    (await wait_for_element(browser,(By.XPATH, '//*[@id="main-page-wrapper"]/div[2]/div/div[3]/div[2]/div[4]/button'))).click()  # первая кнопка далее
    (await wait_for_element(browser,(By.XPATH, '//*[@id="main-page-wrapper"]/div[2]/div/div[2]/div[2]/div[3]/button[2]'))).click()  # вторая кнопка далее
    await asyncio.sleep(2)
    (await wait_for_element(browser,(By.CLASS_NAME, 'certificate-selector__list-option'))).click()
    (await wait_for_element(browser,(By.CSS_SELECTOR, 'button.rros-ui-lib-button.rros-ui-lib-button--primary[data-cy="select-certificate-button"]'))).click()
    await asyncio.sleep(10)
    await cursor.execute(f"UPDATE requests SET comment == 'Запрошен' WHERE cad_n == '{result[0]}' AND id == '{result[1]}'")
    await conn.commit()
    browser.get('https://lk.rosreestr.ru/eservices/request-info-from-egrn/real-estate-object-or-its-rightholder')

问题是我需要在一个浏览器中处理数据库中的所有记录。当前代码处理第一个条目,然后打开另一个浏览器。

试图扔

async with aiosqlite.connect(db_path) as conn:
        async with conn.cursor() as cursor:
            await cursor.execute("SELECT cad_n, id, name FROM requests WHERE comment='Запросить'")
            results = await cursor.fetchall()
            for result in results:

在 requests_v() 函数的开头和该函数的末尾,我放置 browser.back() (据我所知,它返回上一页),但问题是相同的......请告诉我该怎么做这?

python
  • 2 个回答
  • 29 Views
Martin Hope
Михаил Ширшов
Asked: 2023-10-10 18:12:21 +0000 UTC

使用电子签名证书加密文件(由俄罗斯数字发展部颁发)

  • 5

可获得以下证书:

在此输入图像描述

证书扩展格式.cer,编码(如果我没有记错这个词的话)ASN.1,通过代码从证书中提取信息:

def get_certificate_format(file_path):
    with open(file_path, 'rb') as f:
        der = f.read()
        try:
            x509 = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_ASN1, der)
            return 'ASN.1'
        except OpenSSL.crypto.Error:
            pass
        
        try:
            x509 = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_PEM, der)
            return 'PEM'
        except OpenSSL.crypto.Error:
            pass
        
        return 'Unknown'

我无法取出公钥,如果我理解正确的话,文件是用它加密的。文件必须使用 DER 编码方法和加密文件扩展名 .enc 进行加密

请告诉我是否有任何方法可以使用 python 来加密带有证书的文件。即使获取公钥也是一个问题:

import OpenSSL.crypto
import glob
folder_path = r"F:\1.Сертификаты ГОССТРУКТУР"
file_paths = glob.glob(f"{folder_path}/**/*.cer", recursive=True)
for file_path in file_paths:
    with open(file_path, "rb") as file:
        cert_data = file.read()
        cert = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_ASN1, cert_data)
    public_key = cert.get_pubkey().to_cryptography_key()
    print(public_key)

给出错误信息

Traceback (most recent call last):
  File "f:\Python\Flask\t.py", line 9, in <module>
    public_key = cert.get_pubkey().to_cryptography_key()
  File "C:\Users\shirshov\AppData\Local\Programs\Python\Python39\lib\site-packages\OpenSSL\crypto.py", line 1239, in get_pubkey
    _raise_current_error()
  File "C:\Users\shirshov\AppData\Local\Programs\Python\Python39\lib\site-packages\OpenSSL\_util.py", line 57, in exception_from_error_queue
    raise exception_type(errors)
OpenSSL.crypto.Error: [('digital envelope routines', '', 'decode error')]
python
  • 1 个回答
  • 32 Views
Martin Hope
Михаил Ширшов
Asked: 2023-08-16 14:03:30 +0000 UTC

将 USRN 坐标转换为地理坐标

  • 5

我试图自己弄清楚,但我已经“飘”在边缘了。有来自 USRN 的摘录/CPT 的坐标,其类型为“ x 536359.03 ”和“ y 2205836.12 ”。我找到了一个可以将这些坐标转换为地理坐标的网站。根据该网站,地理坐标“W 56.37917 ”和“ D 43.83337 ”以及坐标结果是正确的。由于我将来会有很多来自 USRN 的此类坐标,因此我想用 Python 来完成。

我在 USRN 中找到了一个坐标系,称为“ MSK-52 zone 2 Nizhny Novgorod Region [MB:6335202] ”(通过反复试验......)及其网站上的“ PROJ.4 ” - “ +proj =tmerc +lat_0= 0 +lon_0=44.55 +k=1 +x_0=2250000 +y_0=-5714743.504 +ellps=krass +towgs84=23.57,-140.95,-79.8,0,0.35,0.79,-0.22 +单位=m +no_defs“。我发现我上面指出的“ PROJ.4 ”是根据 GOST 51794-2008 (我查看了文档......有一个移液器)并且它被取消了,现在,据我了解 GOST 32453-2013 ,我没有找到PROJ.4它的

我尝试在网站上拿起“ PROJ.4 ” ,在窗口1(坐标系/投影输入)的网站上我输入了上面写的“ PROJ.4 ”,在窗口2中我拿起了“ PROJ.4”。 4 ”对于俄罗斯联邦来说,但我不认为一切都那么简单。

请帮帮我。

这是我的代码:

import pyproj
# Создаем объект проекции для системы координат Гаусса-Крюгера
proj_gk = pyproj.Proj("+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,0,0,0,0 +units=m +no_defs")

# МСК-52 Нижегородская область
proj_msk52 = pyproj.Proj("+proj=tmerc +lat_0=0 +lon_0=44.55 +k=1 +x_0=2250000 +y_0=-5714743.504 +ellps=krass +towgs84=23.57,-140.95,-79.8,0,0.35,0.79,-0.22 +units=m +no_defs")

# Создаем объект проекции для географических координат (широта, долгота)
proj_geo = pyproj.Proj("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs")

# Задаем координаты в системе Гаусса-Крюгера
x = 536359.03
y = 2205836.12

# Производим преобразование координат из системы Гаусса-Крюгера в МСК-52 Нижегородская область
x_msk52, y_msk52 = pyproj.transform(proj_gk, proj_msk52, x, y)

# Производим преобразование координат из МСК-52 Нижегородская область в географические координаты
lon, lat = pyproj.transform(proj_msk52, proj_geo, x_msk52, y_msk52)

print("Широта: ", lat)
print("Долгота: ", lon)
python
  • 2 个回答
  • 63 Views
Martin Hope
Михаил Ширшов
Asked: 2022-12-09 14:47:01 +0000 UTC

使用 BS4 从 XML 解析问题

  • 5

请帮我解决这个问题。我有一个具有这种结构的 xml 文件:

<?xml version="1.0">
<extract_cadastral_plan_territory>
  <details_statement>
    <group_top_requisites>
      <organ_registr_rights></organ_registr_rights>
      <date_formation>2022-12-02</date_formation>
      <registration_number>****-***/****-*********</registration_number>
    </group_top_requisites>
  </details_statement>
  <details_request>
    <date_received_request>2022-12-02</date_received_request>
    <date_receipt_request_reg_authority_rights>2022-12-02</date_receipt_request_reg_authority_rights>
  </details_request>
  <cadastral_blocks>
    <cadastral_block>
      <cadastral_number>52:18:0010180</cadastral_number>
      <area_quarter>
        <area>1.1</area>
        <unit>059</unit>
      </area_quarter>
      <land_record>
        <object>
          <common_data>
            <type>
              <code>002001001000</code>
              <value>Земельный участок</value>
            </type>
            <cad_number>52:18:0010180:1</cad_number>
          </common_data>
          <subtype>
            <code>01</code>
            <value>Землепользование</value>
          </subtype>
        </object>
        <params>
          <category>
            <type>
              <code>003002000000</code>
              <value>Земли населенных пунктов</value>
            </type>
          </category>
          <permitted_use>
            <permitted_use_established>
              <by_document>Жилой частный сектор</by_document>
            </permitted_use_established>
          </permitted_use>
          <permittes_uses_grad_reg>
            <reg_numb_border>52:00-7.1</reg_numb_border>
          </permittes_uses_grad_reg>
          <area>
            <value>438</value>
            <inaccuracy>7</inaccuracy>
          </area>
        </params>
        <address_location>
          <address_type>
            <code>01</code>
            <value>Установленный</value>
          </address_type>
          <address>
            <address_fias>
              <level_settlement>
                <fias>6a7510ae-0e9d-4e74-a36f-57fe370a5149</fias>
                <okato>22401382000</okato>
                <kladr>52000001000103800</kladr>
                <oktmo>22701000001</oktmo>
                <postal_code>603040</postal_code>
                <region>
                  <code>52</code>
                  <value>Нижегородская область</value>
                </region>
                <city>
                  <type_city>г</type_city>
                  <name_city>Нижний Новгород</name_city>
                </city>
              </level_settlement>
              <detailed_level>
                <street>
                  <type_street>пер</type_street>
                  <name_street>Сочинский</name_street>
                </street>
                <level1>
                  <type_level1>уч</type_level1>
                  <name_level1>1</name_level1>
                </level1>
              </detailed_level>
            </address_fias>
            <readable_address>Российская Федерация , Нижегородская обл, городской округ город Нижний Новгород , г Нижний Новгород, пер Сочинский, земельный участок 1</readable_address>
          </address>
        </address_location>
        <cost>
          <value>1010106.84</value>
        </cost>
      </land_record>
    </cadastral_block>
  </cadastral_blocks>
</extract_cadastral_plan_territory>

我无法获取对象的面积(准确地从文件中获取),我使用这段代码:

from bs4 import BeautifulSoup
from pathlib import Path

file_path = r"C:\Users\shirshov\Desktop\2"


fg = '''<?xml version="1.0">
<extract_cadastral_plan_territory>
  <details_statement>
    <group_top_requisites>
      <organ_registr_rights></organ_registr_rights>
      <date_formation>2022-12-02</date_formation>
      <registration_number>****-***/****-*********</registration_number>
    </group_top_requisites>
  </details_statement>
  <details_request>
    <date_received_request>2022-12-02</date_received_request>
    <date_receipt_request_reg_authority_rights>2022-12-02</date_receipt_request_reg_authority_rights>
  </details_request>
  <cadastral_blocks>
    <cadastral_block>
      <cadastral_number>52:18:0010180</cadastral_number>
      <area_quarter>
        <area>1.1</area>
        <unit>059</unit>
      </area_quarter>
      <land_record>
        <object>
          <common_data>
            <type>
              <code>002001001000</code>
              <value>Земельный участок</value>
            </type>
            <cad_number>52:18:0010180:1</cad_number>
          </common_data>
          <subtype>
            <code>01</code>
            <value>Землепользование</value>
          </subtype>
        </object>
        <params>
          <category>
            <type>
              <code>003002000000</code>
              <value>Земли населенных пунктов</value>
            </type>
          </category>
          <permitted_use>
            <permitted_use_established>
              <by_document>Жилой частный сектор</by_document>
            </permitted_use_established>
          </permitted_use>
          <permittes_uses_grad_reg>
            <reg_numb_border>52:00-7.1</reg_numb_border>
          </permittes_uses_grad_reg>
          <area>
            <value>438</value>
            <inaccuracy>7</inaccuracy>
          </area>
        </params>
        <address_location>
          <address_type>
            <code>01</code>
            <value>Установленный</value>
          </address_type>
          <address>
            <address_fias>
              <level_settlement>
                <fias>6a7510ae-0e9d-4e74-a36f-57fe370a5149</fias>
                <okato>22401382000</okato>
                <kladr>52000001000103800</kladr>
                <oktmo>22701000001</oktmo>
                <postal_code>603040</postal_code>
                <region>
                  <code>52</code>
                  <value>Нижегородская область</value>
                </region>
                <city>
                  <type_city>г</type_city>
                  <name_city>Нижний Новгород</name_city>
                </city>
              </level_settlement>
              <detailed_level>
                <street>
                  <type_street>пер</type_street>
                  <name_street>Сочинский</name_street>
                </street>
                <level1>
                  <type_level1>уч</type_level1>
                  <name_level1>1</name_level1>
                </level1>
              </detailed_level>
            </address_fias>
            <readable_address>Российская Федерация , Нижегородская обл, городской округ город Нижний Новгород , г Нижний Новгород, пер Сочинский, земельный участок 1</readable_address>
          </address>
        </address_location>
        <cost>
          <value>1010106.84</value>
        </cost>
      </land_record>
    </cadastral_block>
  </cadastral_blocks>
</extract_cadastral_plan_territory>'''



for path in Path(file_path).rglob('*.XML'):
    with open(path, 'r',encoding='utf-8') as parse:
        xml = parse.read()
        soup = BeautifulSoup(xml, features="xml")
        print(soup.select_one('permitted_use_established by_document'))
        print(soup.select_one('area value'))

在这里,我尝试将文件结构放入一个变量中,我成功了,但它在 xml 文件中不起作用。还尝试了地方“soup = BeautifulSoup(xml, features="xml")”,使用了“soup = BeautifulSoup(xml, features="lxml")”,然后给出了“<by_document>Residential Private Sector</by_document>”,但不显示“438”。假设问题出在xml文件的编码上,因为 当我从变量(用 visual studio 代码编写)复制文本并将其粘贴到记事本中并保存在 xml 中时,它搜索没有问题,但是当通过记事本重新保存原始 xml 文件时,它没有提供任何内容。也许这就是问题所在。尝试重装python、visual studio code、lxml、bs4,无果。

python
  • 2 个回答
  • 24 Views
Martin Hope
Михаил Ширшов
Asked: 2022-09-14 21:11:03 +0000 UTC

请帮我弄清楚为什么信息被覆盖?

  • -1

有这个 XML:

<common_data>
    <type>
      <code>002001001000</code>
      <value>Земельный участок</value>
    </type>
    <cad_number>52:40:0902001:102</cad_number>
    <type>
      <code>002001001000</code>
      <value>ЗУ</value>
    </type>
    <cad_number>52:45:0502000:1001</cad_number>
</common_data>

需要按顺序上传到表 cad_number(列“KN”)和值(列“Type”):

          КН                Тип
0 52:40:0902001:102  Земельный участок
1 52:45:0502000:1001 ЗУ

这是我的代码:

from bs4 import BeautifulSoup
from pathlib import Path
import pandas as pd

file_path = r'C:\Users\shirshov\Desktop\11\1' # путь к xml файлам, откуда берутся данные
excel_file = r'C:\Users\shirshov\Desktop\11\1.xlsx' # Путь до excel файла, куда попадает информация из выписок


name_3 = []
name_2 = []
page_1 = pd.DataFrame(columns = [])

for path in Path(r'C:\Users\shirshov\Desktop\11\1').rglob('*.XML'):
    with open(path, 'r',encoding='utf-8') as parse: 
        xml = parse.read()
        soup = BeautifulSoup(xml, 'lxml')
        for right in soup.find_all('common_data'):
            for child_3 in right.findChildren(['type'], recursive = False):
                for child_inn in child_3.findChildren(['value'], recursive = False): 
                    for df in child_inn:
                        name_3.append(df.text)
                        

        for right_1 in soup.find_all('common_data'):
            for child_2 in right_1.findChildren(['cad_number'], recursive = False):
                    for dfgkj in child_2:
                        name_2.append(dfgkj.text)
                        

        
        for i, x in enumerate(name_2):
            fggg = '{b:6s}'.format(a=i+1,b=x)
        for i, x in enumerate(name_3):
            fggg_1 = '{b:6s}'.format(a=i+1,b=x)
            Cad_num_flat = {'КН':f'{fggg}',
                    'Тип':f'{fggg_1}',}
        
            page_1 = pd.concat([page_1, pd.DataFrame.from_records([Cad_num_flat])], ignore_index=True)
            print(page_1)


with pd.ExcelWriter(excel_file, engine='openpyxl', mode = 'w') as writer:
    page_1.to_excel(writer, sheet_name='Помещения',index=True)

出了什么问题,在哪里?请帮帮我。

python
  • 0 个回答
  • 0 Views
Martin Hope
Михаил Ширшов
Asked: 2022-08-26 14:11:38 +0000 UTC

在 Excel 中逐行显示信息

  • 0

请帮我在Excel中逐行显示来自xml文件的信息(每一行都有自己的来自xml的信息),结果是这样的:在KH列中,它在一行中给出了所有信息,在数字和类型中列它只给出找到的最后一个值并将其写在 Excel 中。

在屏幕上,我展示了如何处理 print(Number, Type)、print(dhdh) 和 print(page_1) 以及它是如何在 Excel 中编写的。我想逐行写下信息以及打印产生的所有信息。 在此处输入图像描述

Python中的代码:

from bs4 import BeautifulSoup
from pathlib import Path
import pandas as pd


file_path = r'F:\Python\XML\2'
excel_file = r'F:\Python\XML\2\2.xlsx'


page_1 = pd.DataFrame(columns = [])

for path in Path(file_path).rglob('*.XML'):
        with open(path, 'r',encoding='utf-8') as parse:
            xml = parse.read()
            soup = BeautifulSoup(xml, features="xml")
            for param in soup.find_all('num:OldNumber'):
                    Number = param.get('Number')
                    Type = param.get('Type')
                    print(Number, Type)
            for dt in soup.find_all('PrevCadastralNumbers'):
                dhdh = dt.text
                print(dhdh)
            Cad = {'КН':f'{dhdh}',
                    'Number':f'{Number}',
                    'Type':f'{Type}',}
page_1 = pd.concat([page_1, pd.DataFrame.from_records([Cad])], ignore_index=True, axis=0)
print(page_1)
with pd.ExcelWriter(excel_file, engine='openpyxl', mode = 'w') as writer:
    page_1.to_excel(writer, sheet_name='КН',index=True)

XML 看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="EGRP_Reestr_Extract_Gkn_OKS_07_Common.xsl"?>
<KPOKS xmlns="urn://x-artefacts-rosreestr-ru/outgoing/kpoks/4.0.1" xmlns:smev="urn://x-artefacts-smev-gov-ru/supplementary/commons/1.0.1" xmlns:num="urn://x-artefacts-rosreestr-ru/commons/complex-types/numbers/1.0" xmlns:adrs="urn://x-artefacts-rosreestr-ru/commons/complex-types/address-output/4.0.1" xmlns:spa="urn://x-artefacts-rosreestr-ru/commons/complex-types/entity-spatial/5.0.1" xmlns:param="urn://x-artefacts-rosreestr-ru/commons/complex-types/parameters-oks/2.0.1" xmlns:cer="urn://x-artefacts-rosreestr-ru/commons/complex-types/certification-doc/1.0" xmlns:doc="urn://x-artefacts-rosreestr-ru/commons/complex-types/document-output/4.0.1" xmlns:flat="urn://x-artefacts-rosreestr-ru/commons/complex-types/assignation-flat/1.0.1" xmlns:ch="urn://x-artefacts-rosreestr-ru/commons/complex-types/cultural-heritage/2.0.1">
  <Realty>
    <Flat CadastralNumber="52:21:0000103:5144" State="06" DateCreated="2014-11-12">
      <CadastralBlock>52:21:0000103</CadastralBlock>
      <ObjectType>002001003000</ObjectType>
      <ParentCadastralNumbers>
        <CadastralNumberOKS>52:21:0000103:200</CadastralNumberOKS>
      </ParentCadastralNumbers>
      <PrevCadastralNumbers>
        <CadastralNumber>52:21:0000103:3569</CadastralNumber>
        <CadastralNumber>52:21:0000103:3591</CadastralNumber>
      </PrevCadastralNumbers>
      <OldNumbers>
        <num:OldNumber Type="01" Number="7062" />
        <num:OldNumber Type="02" Number="3651654" />
      </OldNumbers>
    </Flat>
  </Realty>
</KPOKS>
python
  • 1 个回答
  • 51 Views
Martin Hope
Михаил Ширшов
Asked: 2022-06-27 16:27:25 +0000 UTC

如何在电报聊天机器人(aiogram 库)中将消息文本转换为小写?

  • 0

问题是(我将编写代码),当用户输入消息“Union”(小写字母或大写字母)或“Union”时,我开始在数据库中搜索 Name1 列,然后我应该给出所有找到的记录。但是在数据库中,在Name1列中,文本可以同时包含大写和小写字母,一般情况下,还有其他选项(有很多)。以前我使用“if message.text.lower() == "hello":" 并且一切正常,我想将用户的消息传递给一个变量(在数据库中搜索它)并应用“.lower() ”给它,类似于“消息.text.lower()==名称:”。什么都没有成功。我认为可以立即在变量中执行此操作,例如像这样的“name = message.text.lower()”或“name = message.text.lower() ==message.text”,但它仍然没有工作。我怎样才能使它在用户输入消息(任何,甚至是这样的“SoYuz”)时使用小写。或者它可能对我没有帮助,我需要在数据库本身中引入一个,即 将“联合”或“联合”更改为“联合”?

@dp.message_handler(state=ShopCentre_name.shop_centre_name)
async def shop_centre_name(message: types.Message, state: FSMContext):
    name = message.text
    if name.lower():
        name_1 = cursor.execute(f"SELECT * FROM shopCentre WHERE Name1 LIKE '%{name}%'").fetchall()
        num_col = len(name_1)
        if name == '/Stop':
            await message.answer('Поиск завершен. Для поиска введите команду /start (аналогичные команды - /ы и /s)')
            await state.finish()
        else:
            await message.answer('Количество найденных записей:\n' + '<b>' + str(num_col) + '</b>' + '\n\nДля завершения поиска, нажмите на /Stop.')
            for row in name_1:
                await message.answer('Наименование торгового центра:\n' + '<b>' + row[1] + '</b>' + '\n\n' + 'Кадастровый номер объекта налогообложения:\n'+ '<b>' + row[3] + '</b>' + '\n\n' + 'Вид объекта:\n' + '<b>' + row[2] + '</b>')

除了我的问题:我尝试编写代码,但没有给出预期的结果(见截图 1):

@dp.message_handler(state=ShopCentre_name.shop_centre_name)
async def shop_centre_name(message: types.Message, state: FSMContext):
    name = message.text.lower()
    name_1 = cursor.execute(f"SELECT * FROM shopCentre WHERE Name1 LIKE '%{name}%'").fetchall()
    num_col = len(name_1)
    if name == '/Stop':
            await message.answer('Поиск завершен. Для поиска введите команду /start (аналогичные команды - /ы и /s)')
            await state.finish()
    else:
        await message.answer('Количество найденных записей:\n' + '<b>' + str(num_col) + '</b>' + '\n\nДля завершения поиска, нажмите на /Stop.')
        for row in name_1:
            await message.answer('Наименование торгового центра:\n' + '<b>' + row[1] + '</b>' + '\n\n' + 'Кадастровый номер объекта налогообложения:\n'+ '<b>' + row[3] + '</b>' + '\n\n' + 'Вид объекта:\n' + '<b>' + row[2] + '</b>')


Также, думал написать код вот так "async def shop_centre_name(message: types.Message.text.lower(), state: FSMContext):" или подобные варианты, но выдавало ошибку, т.к. просто не знаю, можно ли сюда прописать ".lower()".

代码执行结果(截图1)

代码执行结果(截图1)

python
  • 0 个回答
  • 0 Views
Martin Hope
Михаил Ширшов
Asked: 2022-06-25 14:32:13 +0000 UTC

新命令未添加到菜单按钮中的电报机器人(aiogram 库)

  • 0

在此处输入图像描述

制作了一个菜单按钮,以采样为模型

我决定稍后添加我的命令,但它们没有在按钮中更新。我试图重新启动机器人,清除历史记录,更改令牌......甚至删除了添加此按钮的代码......怎么了......?))我在所有命令之后插入了代码本身(最后):

async def set_default_commands(dp):
await dp.bot.set_my_commands(
    [
        types.BotCommand('start', 'Запустить бота'), 
        types.BotCommand("shop_centre", "БД торговых центров из 2% Перечня"), 
        types.BotCommand("FNS", "БД ФНС, пока что загружена по юр. лицам"),
    ]
)
await set_default_commands(dp)
python aiogram
  • 1 个回答
  • 760 Views
Martin Hope
Михаил Ширшов
Asked: 2022-06-21 18:50:18 +0000 UTC

通过电报搜索时,数据库中的机器人(aiogram 库)给出以下错误:can't find end of italic entity at byte offset 126

  • 0

在此处输入图像描述

下午好。我不是通过机器人的电报向这个数据库发出请求,所有数据都没有问题地返回,但是通过机器人它给出了一个错误 - 无法解析实体:在字节偏移量 126 处找不到斜体实体的结尾. 要搜索并输出到电报,我使用以下代码:

cursor.execute(f"SELECT * FROM shopCentre WHERE Name3 = '{Kad_Num}'")
records = cursor.fetchall()
global num_row
num_row = len(records)
if Kad_Num == '/Stop_Search':
    await message.answer('Поиск завершен.')
    await state.finish()
else:
    if num_row == 1:
        for result in records:
            await message.answer('Количество найденных записей:\n' + str(num_row) + '\n\nДля завершения поиска, нажмите на /Stop_Search', parse_mode="MarkdownV2")
            await message.answer('Наименование торгового центра:\n'+str(result[1]) + "\n\n" + 'Адрес объекта налогообложения:\n'+str(result[4])+ "\n\n" +'Вид объекта:\n'+str(result[2]) + "\n\n" + 'Общая площадь объекта недвижимости, кв.м.:\n'+str(result[8]))

附上数据库中的一个小屏幕截图。在屏幕上,可以看到蓝色箭头,这意味着 - load remaining part of the value。会不会因为表格单元格中的信息量大,例如Name4列中的地址而出现这样的错误。或者检查文本格式,例如没有斜体,粗体,以便它在任何地方都一样?

python sqlite
  • 1 个回答
  • 88 Views

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5