无法使用Selenium定位元素

时间:2018-06-20 10:31:25

标签: python selenium button selenium-chromedriver

我将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"))

2 个答案:

答案 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()