尝试使用CSS选择器或XPATH识别具有不同ID的元素(Selenium和Python)



页面上有3个示例元素:

  1. <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>

  2. <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>

  3. <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

最新更新