Попытка выбрать и установить несколько флажков на странице. у них нет подходящего класса, идентификатора или имени. Все, что у них общего, — это тип ввода (флажок). Я могу установить отдельные флажки с помощью XPATH, но это нецелесообразно, так как на странице не менее 100 флажков.
Вот часть HTML. Я тестировал этот код на автономной версии сайта.
<body>
<tbody>
<tr>
<td class = "borderBot"><b>Activity</b></td>
<td class = "borderBot">
<table cellpadding = "3" cellspacing = "3" width = "100%">
<tbody>
<tr>
<td width = "33%">
<input type = "checkbox" name = "competency1Activity" value = "1" />
Plan (ie Interpreted diag etc)
</td>
<td width = "33%">
<input type = "checkbox" name = "competency1Activity" value = "2" />
Carry Out (ie conducted work)
</td>
<td width = "33%">
<input type = "checkbox" name = "competency1Activity" value = "4" />
Complete (ie Compliance etc)
</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td class = "borderBot"><b>Supervision</b></td>
<td class = "borderBot">
<table cellpadding = "3" cellspacing = "3" width = "100%">
<tbody>
<tr>
<td width = "33%">
<input
type = "checkbox"
name = "competency1Supervision"
value = "1"
/>
Direct
</td>
<td width = "33%">
<input
type = "checkbox"
name = "competency1Supervision"
value = "2"
/>
General
</td>
<td width = "33%">
<input
type = "checkbox"
name = "competency1Supervision"
value = "4"
/>
Broad
</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td class = "borderBot"><b>Support</b></td>
<td class = "borderBot">
<table cellpadding = "3" cellspacing = "3" width = "100%">
<tbody>
<tr>
<td width = "33%">
<input type = "checkbox" name = "competency1Support" value = "1" />
Constant
</td>
<td width = "33%">
<input type = "checkbox" name = "competency1Support" value = "2" />
Intermittent
</td>
<td width = "33%">
<input type = "checkbox" name = "competency1Support" value = "4" />
Minimal
</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td class = "borderBot"><b>Materials</b></td>
<td class = "borderBot">
<table cellpadding = "3" cellspacing = "3" width = "100%">
<tbody>
<tr>
<td width = "50%">
<input type = "checkbox" name = "competency1Extended" value = "1" />
Insulation failure
</td>
<td width = "50%">
<input type = "checkbox" name = "competency1Extended" value = "2" />
Incorrect connections
</td>
</tr>
<tr>
<td width = "50%">
<input type = "checkbox" name = "competency1Extended" value = "4" />
Circuits-wiring; eg. open short
</td>
<td width = "50%">
<input type = "checkbox" name = "competency1Extended" value = "8" />
Unsafe condition
</td>
</tr>
<tr>
<td width = "50%">
<input
type = "checkbox"
name = "competency1Extended"
value = "16"
/>
Apparatus/component failure
</td>
<td width = "50%">
<input
type = "checkbox"
name = "competency1Extended"
value = "32"
/>
Related mechanical failure
</td>
</tr>
<tr>
<td width = "50%">
<input
type = "checkbox"
name = "competency1Extended"
value = "64"
/>
Read/interpret drawings/plans
</td>
<td width = "50%">
<input
type = "checkbox"
name = "competency1Extended"
value = "128"
/>
Other elec app and circuit faults
</td>
</tr>
</tbody>
</table>
</td>
</tr>
<input
type = "hidden"
id = "competency1ExtendedCount"
name = "competency1ExtendedCount"
value = "8"
/>
</tbody>
</body>
checkboxes = driver.find_element(By.CSS_SELECTOR, "input[type='checkbox']").click()
checkboxes = driver.find_element(By.CSS_SELECTOR, "input[type='checkbox']")
for checkbox in checkboxes:
checkboxes.click()
time.sleep(.3)
checkboxes = driver.find_element("name", "competency1Ativity").click()
Вы можете определить все флажки и сохранить элементы в списке, а затем щелкнуть по ним один за другим, используя одну из следующих стратегий поиска:
Использование CSS_SELECTOR:
from selenium.webdriver.common.by import By
checkboxes = driver.find_elements(By.CSS_SELECTOR, "td input[type='checkbox']")
for checkbox in checkboxes:
checkbox.click()
Использование XPATH:
from selenium.webdriver.common.by import By
checkboxes = driver.find_elements(By.XPATH, "//td//input[@type='checkbox']")
for checkbox in checkboxes:
checkbox.click()
Ваш option 2
был почти правильным, но должен был быть find_elements()
не find_element()
Так как find_element()
просто возвращает веб-элемент, тогда как find_elements()
возвращает список элементов.
код:
checkboxes = driver.find_elements(By.CSS_SELECTOR, "input[type='checkbox']")
for checkbox in checkboxes:
checkbox.click()
time.sleep(0.5)
Я получаю эту ошибку с этим кодом: AttributeError: объект «список» не имеет атрибута «щелчок»
@Mitch, тебе нужно скопировать и вставить точный мой код. он должен работать нормально. Я уверен, что вы можете неправильно оценить переменную. вместо checkbox.clcik()
вы могли бы использовать checkboxes.click()
Пожалуйста, проверьте еще раз.
ЭТО РАБОТАЛО!! Спасибо! Я использовал версию CSS_SELECTOR, и это сработало.