Ошибка при парсинге no such element: Unable to locate element
Селениум выдает ошибку на переменную 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®Name=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 шт):
Автор решения: user510170
→ Ссылка
У Вас 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.