首先我将展示代码:
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() (据我所知,它返回上一页),但问题是相同的......请告诉我该怎么做这?
您需要将驱动程序初始化移出 for 循环
结果是这样的: