Selenium Python - 单击图像链接出错:消息:元素不可见

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Selenium Python - 单击图像链接出错:消息:元素不可见相关的知识,希望对你有一定的参考价值。

我正在尝试激发登录的onclick事件,下面是html示例

<div id="divAccInfoDefaultLoginButton" style="display:inline">
    <a href="#" onclick="OnClickLogin();return false;" 
        onmouseout="if ( !isInSSOChecking() &amp;&amp; !isInEKBA() &amp;&amp; EnableAccInfo() ) { loadMouseEventImage('pic_login', 'pic_login'); }" 
        onmouseover="if ( !isInSSOChecking() &amp;&amp; !isInEKBA() &amp;&amp; EnableAccInfo() ) { loadMouseEventImage('pic_login', 'pic_login_on'); }">
        <img id="pic_login" border="0" src="./images/btn_login_ch.gif?cv=L3.01R2" title="登入">
    </a>
</div>

我尝试单击href或图像,但都失败为selenium.common.exceptions.ElementNotVisibleException:消息:元素不可见

href = driver.find_element_by_xpath("//div[@id='divAccInfoDefaultLoginButton']//a")
href.click()

img= driver.find_element_by_xpath("//div[@id='divAccInfoDefaultLoginButton']//a//img")
img.click()

刺激点击动作以触发onclick事件的正确方法是什么?

答案

添加WebDriverWait()也需要切换到iframe

loginFrame = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "betSlipFrame")))
driver.switch_to.frame(loginFrame)

# Login box visible click it
href = driver.find_element_by_xpath("//div[@id='divAccInfoDefaultLoginButton']//a")
href.click()
另一答案

要单击标题为登录的元素,您需要引导WebDriverWait以使所需元素可单击,您可以使用以下任一解决方案:

  • CSS_SELECTORWebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div#divAccInfoDefaultLoginButton>a[onclick*='OnClickLogin']>img#pic_login"))).click()
  • XPATHWebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@id='divAccInfoDefaultLoginButton']/a[contains(@onclick,'OnClickLogin')]/img[@id='pic_login']"))).click()
  • 注意:您必须添加以下导入: from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC

以上是关于Selenium Python - 单击图像链接出错:消息:元素不可见的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Selenium Python 单击锁定图像文件

AttributeError:“WebElement”对象没有属性“单击”错误尝试使用 Selenium Python 单击链接

尝试单击带有 selenium 和 Python 的超链接时出现 NoSuchElementException 错误 [重复]

如何使用 Selenium 和 Java 单击具有 SVG 子项的链接?

Python selenium从表中提取数据并单击

Selenium - Python - 选择 - 下拉菜单链接