Selenium Python - При щелчке ссылки на изображение получена ошибка: Сообщение: элемент не виден - PullRequest
0 голосов
/ 17 ноября 2018

Я пытаюсь активировать событие 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?

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

Чтобы щелкнуть по элементу с заголовком 登入 , необходимо настроить WebDriverWait , чтобы требуемый элемент был активным для клика , и вы можете использовать любой из следующихрешения:

  • CSS_SELECTOR:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div#divAccInfoDefaultLoginButton>a[onclick*='OnClickLogin']>img#pic_login"))).click()
    
  • XPATH:

    WebDriverWait(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
    
0 голосов
/ 17 ноября 2018

добавить 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()
...