Я хочу подсчитать количество входных тегов, присутствующих в формах HTML.
Я использовал Selenium Web Driver (Chrome) с Python3.
Код Python
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
def extract_login_details(url):
options = Options()
options.add_argument('--headless')
browser = webdriver.Chrome(chrome_options=options)
browser.get(url)
forms = browser.find_elements_by_xpath('//form')
print(f'forms - {len(forms)}')
for i in range(len(forms)):
inputs = browser.find_elements_by_xpath(f'//form[{i+1}]//*/input | //form[{i+1}]/input')
print(f'input tags in form{i+1} is {len(inputs)}')
extract_login_details('http://localhost:8081/selenium/test2.jsp')
test2.jsp
<html>
<body>
<form action="form1" method="post" autocomplete="on" >
<input type="email" class="inputtext" name="email1" id="email1"/>
<input type="password" class="inputtext" name="pass" id="pass"/>
<input type="submit">
</form>
<form action="form2">
<input type="email" class="inputtext" name="email2" id="email2"/>
<div><input type="password" class="inputtext" name="pass2" id="pass2"/></div>
</form>
</body>
</html>
Правильный вывод
формы - 2
входные теги в form1 это 3
входные теги в form2 это 2
Но когда я заключаю вторую форму внутри тега div ( модифицированный test2.jsp ), я получаю неправильныйвывод.
<html>
<body>
<form action="form1" method="post" autocomplete="on" >
<input type="email" class="inputtext" name="email1" id="email1"/>
<input type="password" class="inputtext" name="pass" id="pass"/>
<input type="submit">
</form>
<div>
<form action="form2">
<input type="email" class="inputtext" name="email2" id="email2"/>
<div><input type="password" class="inputtext" name="pass2" id="pass2"/></div>
</form>
</div>
</body>
</html>
Неверный вывод
формы - 2
теги ввода в form1 - 5
теги ввода в form2 - 0