Ошибка при парсинге no such element: Unable to locate element

Рейтинг: 2Ответов: 1Опубликовано: 31.03.2023

Селениум выдает ошибку на переменную search_adress Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id='mainDoc2']/p[3]/b"} и не ищет элемент, какой бы метод не использовался. Как можно самостоятельно задать XPATH или может быть как-то можно в этом случае комбинировать beautifulsoup и селениум?

driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get('https://new.fips.ru/registers-web/action?acName=clickRegister&regName=RUTMAP')
search_reestr = driver.find_element(By.XPATH, "//*[@id='mainpagecontent']/div[2]/div/div[2]/div/table/tbody/tr[5]/td[3]/a").click()
search_diapazon = driver.find_element(By.XPATH, "//*[@id='mainpagecontent']/div[2]/div[2]/div/ul/ul/ul/ul/li[3]/a[2]").click()
search_url = driver.find_element(By.XPATH, "//*[@id='mainpagecontent']/div[2]/div[2]/div/ul/ul/ul/ul/ul/li[4]/a").click()
search_item = driver.find_element(By.XPATH, "//*[@id='mainpagecontent']/div[2]/div/div[4]/div/table/tbody/tr[1]/td[1]/span/a").click()
search_adress = driver.find_element(By.XPATH, "//*[@id='mainDoc2']/p[3]/b")
time.sleep(2)
driver.close()

Ответы

▲ 1

У Вас selenium открывает вторую вкладку, поэтому всё что вам нужно, это переключиться на нее следующим образом:

...
search_item = driver.find_element(By.XPATH, "//*[@id='mainpagecontent']/div[2]/div/div[4]/div/table/tbody/tr[1]/td[1]/span/a").click()
driver.switch_to.window(driver.window_handles[1]) # тут переключаемся
search_adress = driver.find_element(By.XPATH, "//*[@id='mainDoc2']/p[3]/b").text # тут получаем адрес
print(search_adress)
driver.close()

И достаём текст методом .text .Вот результат:

RU, Индивидуальный предприниматель Пи..................

Для BeautifulSoup всё равно придётся переключиться на новую вкладку. Вот код:

...
search_item = driver.find_element(By.XPATH, "//*[@id='mainpagecontent']/div[2]/div/div[4]/div/table/tbody/tr[1]/td[1]/span/a").click()
driver.switch_to.window(driver.window_handles[1]) # тут переключаемся
html_content = driver.page_source
soup = BeautifulSoup(html_content, 'html.parser')
search_adress = soup.find("div", id="mainDoc2").find_all("p")[4].find("b").text # тут получаем адрес
print(search_adress)
driver.close()

Результат тот же самый, что и с selenium без BS.