无法通过 Selenium for Python 定位按钮

Posted

技术标签:

【中文标题】无法通过 Selenium for Python 定位按钮【英文标题】:Unable to locate button via Selenium for Python 【发布时间】:2020-02-03 00:37:03 【问题描述】:

我想通过 Selenium WebDriver 在网站上找到登录按钮并单击它。 html 代码如下:

<a class="myLoginButton" href="#" 
onclick="fireLoginOrRegisterModalRequest('sign_in');ga('send', 'event', 
'service_navigation', 'login', '1st_level');">
Login
</a>

但是无论我使用哪种方法来定位这个按钮,我总是得到错误:

selenium.common.exceptions.NoSuchElementException:消息:没有这样的元素:无法找到元素

我已经尝试了以下方法:

driver.implicitly_wait(10)
login_button = driver.find_element_by_class_name('myLoginButton')
login_button.click()

# login_button = driver.find_element_by_xpath('//button[text()="Login"]')
# login_button = 
# driver.find_element_by_xpath("//button[@class='myLoginButton'] 
# [.='Login']")
# login_button = driver.find_element_by_css_selector('myLoginButton')

注释行是我使用的替代方法。

请对我温柔一点。我是一个绝对的 Python 和 Selenium 新手。

提前谢谢你!

【问题讨论】:

你错过了关于获取 url 的行,尝试在之后设置睡眠,然后再尝试获取元素,或者执行一些函数来检查网站是否已完全加载。这个 wait.until(EC.invisibility_of_element_located((By.XPATH .....)) 也很好用 请检查标签元素是否为iframe的子元素。如果是这样,你必须切换到框架,然后你可以点击元素 检查是否存在任何 iframe。如果您没有正确切换到框架,您将收到此错误。 据我所知没有 iFrame。 【参考方案1】:

如果有 iFrame(登录表单包含在 iframe 中),则需要切换到。

driver.implicitly_wait(10
driver.switch_to.frame('Example')
login_button = driver.find_element_by_class_name('myLoginButton')
login_button.click()

【讨论】:

用户通常应该先定位 iframe 元素,然后再切换到它。代码是 iframe = driver.find_element_by_xpath("(//iframe[@class='someClass']") 然后是 driver.switch_to.frame(iframe) 登录不包含在 iFrame 中。如果有帮助,我可以提供更多 HTML 代码。 你能把完整的html代码或url贴在这里吗?

以上是关于无法通过 Selenium for Python 定位按钮的主要内容,如果未能解决你的问题,请参考以下文章

无法通过 Selenium Python 在可折叠窗口中找到段落文本元素

Python selenium无法通过ID或xpath填写输入框。

如何在 Selenium for Python 中切换到新窗口?

解决python+selenium无法获取提示内容

NoSuchElementException:消息:尝试通过 Selenium 和 Python 单击 VISA 按钮时无法找到元素

带有 Firefox Web 驱动程序的 Selenium 无法通过 Python 代码找到元素