В настоящее время я использую Selenium для приложения для веб-сканирования, и после нескольких успешных модулей меня застряла следующая ситуация: я пытаюсь найти элемент класса "menu" с текстом "Reports", который находится внутрифрейм с именем "frame_applic".
Довольно просто, верно?Должно быть так просто:
browser = webdriver.Chrome()
#Do the necessary crawling to get to this specific menu...
browser.switch_to_frame('frame_applic')
for obj in browser.find_elements_by_class_name('menu'):
if obj.text == 'Reports':
bt_reports = obj
break
#The variable bt_reports should be the one requested.
Вот где это становится интересным: хотя при попытке перейти к желаемому кадру не возникает ошибка, не обнаруживаются элементы с именем класса «menu».Конечно, я, должно быть, неправильно написал кадр или название класса, верно?Таким образом, после того, как вы решили проверить HTML и не вносить никаких других изменений, элементы присутствуют, как если бы сам процесс просмотра исходного кода веб-страницы изменил результат результата.Что здесь может происходить?
Мне не разрешено публиковать полный HTML-код, но следующая структура охватывает вопрос:
<html>
<head>
<TITLE>Page</TITLE>
</head>
<frameset ...>
<frame name="frame_menu" src="https:..." >
<frame name="frame_applic" src="menu.asp?...">
#document
<table width="100%" border="0" cellpadding="5" cellspacing="0">
<tr>
<td colspan="2" align="right">
<table width="95%" border="0" cellpadding="5" cellspacing="0">
<tr><td><a href="https:..." class="menu">Reports</a></td></tr>
<tr><td><a href="https:..." class="menu">Change Password</a></td></tr>
<tr><td><a href="https:..." class="menu">Change Secret Phrase</a></td></tr>
</table>
</td>
</tr>
</table>
</body>
<frame name="frame_bottom" src="https:...">
</frameset>
</html>