Мне нужно было удалить сайт, содержащий список. Нажатие любого элемента списка показывает модальное диалоговое окно, которое содержит некоторый текст, который я хочу удалить. Выполнение этого в цикле приводит к исключению устаревших элементов, поэтому это то, что я делал изначально
elems = browser.find_elements_by_xpath("//a[@data-toggle='modal']")
temp_names = []
for elem in elems:
temp_names.append(elem.text)
где щелчок по этому элементу тега привязки показывает модальное диалоговое окно, поэтому я сохранил текст всех этих элементов в списке и, наконец, сделал это:
for temp_name in temp_names:
print(temp_name)
modals= browser.find_element_by_xpath("//a[contains(text(),'"+temp_name+"')]")
modals.click()
time.sleep(1)
# rest of the scrapping code
Теперь я получаю сообщение об ошибке исключения элемента, хотя temp_name печатает правильный текст. Структура веб-страницы следующая:
<div class="...">
<h4 class="...">
<a href=# data-toggle="modal" data-target="#(target modal dialogue id)">Text</a>
</h4>
. . .
(Some Other tags)
. . .
</div>
<div id =(modal dialogue id) class="..." role="dialog">
. . .
(Some text I want to Scrap)
. . .
</div>
Я ищу текст в теге привязки. Я планирую найти элемент по тексту, а затем щелкнуть его, а затем вернуться к исходному URL-адресу, используя browser.get (URL) в конце цикла, и снова найти второй элемент и так далее.
Я не понимаю, почему он не может найти элемент, так как я только что получил текст элемента в предыдущем цикле. Также, если есть лучший способ сделать это, пожалуйста, поделитесь.
Примечание: Я не могу очистить непосредственно из модального диалогового окна div, если не нажму сначала, иначе возвращаемый текст будет пустым.
Edit:
Ниже приведен мой текущий код:
chromedriver = 'C:\\chromedriver.exe'
chop = webdriver.ChromeOptions()
chop.add_extension('C:\\AdBlock_v3.38.1.crx')
time.sleep(5)
browser = webdriver.Chrome(chromedriver, chrome_options = chop)
for i in range(1,22):
browser.get("http://pasha.org.pk/members/page/"+str(i)+"/")
time.sleep(1)
elems = browser.find_elements_by_xpath("//a[@data-toggle='modal']")
print(len(elems))
temp_names = []
for elem in elems:
temp_names.append(elem.text)
current = browser.current_url
for temp_name in temp_names:
print()
print(temp_name)
print()
modals= browser.find_element_by_xpath(f"//a[contains(text(), '{temp_name}')]")
modals.click()
time.sleep(1)
# elem2 = browser.find_element_by_xpath("//button[@class='close']")
# time.sleep(1)
browser.get(current)
Ниже приведен фрагмент ошибки, которую я получаю:
Ошибка при выполнении кода