我猜这是一个框架问题。
即使您有一个完全正确的 XPATH,Selenium 也不会看到该元素,除非您已经位于包含该元素的框架中。
要快速查看您所在页面上有多少帧:
a = driver.find_elements_by_css_selector("frame")
print(len(a))
如果您发现有,比如说,三个框架,您可以这样做:
driver.switch_to_frame(a[0])
button.click()
或
driver.switch_to_frame(a[1])
button.click()
或
driver.switch_to_frame(a[2])
button.click()
您可以使用以下方式来定位您的元素
find_element_by_id
find_element_by_name
find_element_by_xpath
find_element_by_link_text
find_element_by_partial_link_text
find_element_by_tag_name
find_element_by_class_name
find_element_by_css_selector
请参阅文档http://selenium-python.readthedocs.io/ located-elements.html
一些相同的例子如下
1。通过 CSS 选择器
driver.find_element_by_css_selector('.button.c_button.s_button').click()
2。按名字
driver.find_element_by_name('s_image').click()
3.按类名
driver.find_element_by_class_name('s_image').click()
您应该尝试在点击按钮之前添加一些等待时间,如下所示:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
button = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.ID, "btnNew")));
button.click();
使用上述代码,您最多可以等待 20 秒以使目标按钮变得可点击。否则你会得到
TimeOutException
如果此解决方案不起作用,请检查您的按钮是否位于
<iframe>
元素内。如果是这样,请在单击按钮之前切换到该框架:
driver.switch_to_frame('iframe_id')