Python 3.x 计算html表单中输入标记数的XPATH表达式
我想计算HTML表单中存在的输入标记的数量 我已经将SeleniumWeb驱动程序(Chrome)与Python3结合使用 Python代码Python 3.x 计算html表单中输入标记数的XPATH表达式,python-3.x,selenium-webdriver,xpath,Python 3.x,Selenium Webdriver,Xpath,我想计算HTML表单中存在的输入标记的数量 我已经将SeleniumWeb驱动程序(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'
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表1中的输入标记为3
表单2中的输入标记为2 但是当我将第二个表单包含在div标记(modified 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表1中的输入标记为5
form2中的输入标记为0 最好使用来自当前窗体的定位器和axis来收集属于当前窗体的所有嵌套元素
inputs =forms[i].find_elements_by_xpath("./descendant::input")
完整代码以防万一:
forms = driver.find_elements_by_xpath("//form")
print(f'forms - {len(forms)}')
for i in range(len(forms)):
inputs =forms[i].find_elements_by_xpath("./descendant::input")
print(f'input tags in form{i + 1} is {len(inputs)}')
演示:
更多信息:
inputs =forms[i].find_elements_by_xpath("./descendant::input")
完整代码以防万一:
forms = driver.find_elements_by_xpath("//form")
print(f'forms - {len(forms)}')
for i in range(len(forms)):
inputs =forms[i].find_elements_by_xpath("./descendant::input")
print(f'input tags in form{i + 1} is {len(inputs)}')
演示:
更多信息:
不应该是
吗?您的
不应该是
吗?我尝试在OP的修改html上运行此操作(其中第二个表单包含div标记),但仍然得到相同的错误。你能试试吗?谢谢你@Dmitri,这真的很有帮助。它不仅解决了我的问题,而且使代码简单美观。我喜欢。我只是想知道为什么当第二个表单包含在Div中时,我的代码不起作用。我试图在OP的修改后的html(其中第二个表单包含Div标记)上运行此代码,但仍然得到相同的错误。你能试试吗?谢谢你@Dmitri,这真的很有帮助。它不仅解决了我的问题,而且使代码简单美观。我喜欢。只是想知道为什么我的代码在第二个表单包含在Div中时不起作用。