页面上有3个示例元素:
-
<label class="btn btn-primary"> <input type="radio" id="Q20_0_0-A27" name="Q20_0_0" autocomplete="off" value="27" class="sr-only" onchange="$('#Q20_0_0_change').val('1');wiz.reload();" aria-describedby="Q20_0_0Text" required=""> Compliant </label>
-
<label class="btn btn-primary"> <input type="radio" id="Q20_1_0-A27" name="Q20_1_0" autocomplete="off" value="27" class="sr-only" onchange="$('#Q20_1_0_change').val('1');wiz.reload();" aria-describedby="Q20_1_0Text" required=""> Compliant </label>
-
<label class="btn btn-primary"> <input type="radio" id="Q20_2_0-A27" name="Q20_2_0" autocomplete="off" value="27" class="sr-only" onchange="$('#Q20_2_0_change').val('1');wiz.reload();" aria-describedby="Q20_2_0Text" required=""> Compliant </label>
如您所见,id的形式为Q20_*_0-A27,其中*的取值范围为0-15。
我的目标是单击这些元素/按钮来激活它们,这将加载页面以将单击的按钮更改为:
#1的例子
<label class="btn btn-primary active"> <input type="radio" id="Q20_0_0-A27" name="Q20_0_0" autocomplete="off" value="27" class="sr-only" onchange="$('#Q20_0_0_change').val('1');wiz.reload();" aria-describedby="Q20_0_0Text" required=""> Compliant </label>
下面是我的代码,我似乎不能确定正确的元素
try:
# Find the link with the specified text and class
elements = driver.find_elements(By.CSS_SELECTOR, 'label.btn.btn-primary input[id^="Q20_"][id$="-A27"]')
print(f'Number of elements found: {len(elements)}')
for element in elements:
element_id = element.get_attribute('id')
print(f'Element ID: {element_id}')
element.click()
input("Press Enter to continue...")
except NoSuchElementException:
# The element was not found, so wait and try again
time.sleep(1)
print("retrying")
continue
可以看到id的形式为Q20_*_0-A27,其中*的范围为从0-15。
您可以使用内置的range()
函数:
for num in range(0,28):
driver.find_element(By.CSS_SELECTOR, f'#Q20_{num}_0-A27')).click()
我还没有测试过,但是你可以使用一个更通用的CSS选择器:
label.btn