Я использую Selenium с Python и Chromedriver, чтобы щелкнуть по кнопке (на самом деле это кнопка в HTML, но выглядит как одна на экране и доступна для клика). HTML ниже, я пытаюсь нажать на кнопку с кнопкой "новый ключ".
<td class="read" colspan="4">
<a href="#" id="button-read" onclick="formRead(); return false;" title="Read record from database" tabindex="1" class="button button-read">Read</a>
<a id="button-new" title="Read new record from database" class="button button-new">New</a>
</td>
Я пробовал использовать:
new_button = driver.find_element_by_id("button-new")
new_button = driver.find_element_by_css_selector("A.button.button-new")
new_button = driver.find_element_by_xpath('//*[@id="button-new"]')
с последующим
new_button.click()
Но я получаю исключение NoSuchElementException и не могу его найти.
У меня не было этой проблемы с любыми другими элементами, и я не уверен, где я ошибаюсь.
EDIT с решением:
Я понял, что мне нужно переключить iframe
driver.switch_to.frame(driver.find_element_by_id("nested1"))
Чтобы убедиться, что элемент находится, попробуйте это:
new_button_list = driver.find_elements_by_xpath('//a[@id="button-new"]')
это вернет список из-за использования "элементов":
затем проверьте длину списка, одна хорошая вещь - это не исключение, а также сообщите, находится ли элемент.
попробуйте использовать его с утверждением if
, может быть, они ставят специальную пустую кнопку, чтобы запутать нас,
new_button = driver.find_element_by_id("button-new")
if new_button:
new_button.click()
можете ли вы проверить с find_elements_by_id
сколько btn есть?
btns = driver.find_elements_by_id("button-new")
print(btns)
# also we can check with # find_elements_by_id
btns = driver.find_elements_by_id("button-new")
if len(btns):
new_button[0].click()