我将Selenium与Python和Chromedriver结合使用来单击“按钮”(实际上不是HTML中的按钮,但看起来像屏幕上的一个按钮,并且可以单击)。 HTML在下面,我正在尝试单击带有“新按钮” ID的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,它找不到它。
我没有其他任何问题,也不确定我要去哪里。
编辑解决方案:
我意识到我需要切换iframe
driver.switch_to.frame(driver.find_element_by_id("nested1"))
答案 0 :(得分:0)
要确保元素是否已定位,请尝试以下操作:
new_button_list = driver.find_elements_by_xpath('//a[@id="button-new"]')
由于使用“元素”,这将返回一个列表:
然后检查列表的长度,一件好事是它不会通过异常发生,并且还会让您知道该元素是否已定位。
答案 1 :(得分:0)
尝试将其与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()