RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1550128
Accepted
Михаил Ширшов
Михаил Ширшов
Asked:2023-11-07 20:57:48 +0000 UTC2023-11-07 20:57:48 +0000 UTC 2023-11-07 20:57:48 +0000 UTC

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

  • 772

首先我将展示代码:

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 2 个回答
  • 29 Views

2 个回答

  • Voted
  1. Best Answer
    Gawain
    2023-11-07T21:18:11Z2023-11-07T21:18:11Z

    您需要将驱动程序初始化移出 for 循环

    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)
    results = await cursor.fetchall()
    
    for result in results:
        ...
    
    • 0
  2. Михаил Ширшов
    2023-11-09T16:33:56Z2023-11-09T16:33:56Z

    结果是这样的:

    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()
                if len(results) == 0:
                    pass
                else:
                    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)
                    # /html/body/esia-root/esia-reaction/div/div/div/div/p/text()
                    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()
                for result in results:
                    await requests_v(browser=browser, result=result, conn=conn, cursor=cursor)
    
    async def requests_v(browser,result,conn,cursor):
        (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('Сл-326219160/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('[email protected]')
        (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')
    
    • 0

相关问题

  • 是否可以以某种方式自定义 QTabWidget?

  • telebot.anihelper.ApiException 错误

  • Python。检查一个数字是否是 3 的幂。输出 无

  • 解析多个响应

  • 交换两个数组的元素,以便它们的新内容也反转

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