сообщение об ошибке Python - элемент не виден - PullRequest
1 голос
/ 09 июля 2019

Я получаю эту ошибку:

selenium.common.exceptions.ElementNotVisibleException: Message: element not visible. or Element is not currently interactable.

Как мне это исправить?

элемент:

input class="artfld col-all-min ng-pristine ng-invalid ng-touched" formcontrolname="id" maxlength="10" placeholder="身分證字號" type="text"

код:

from selenium import webdriver
import time
from PIL import Image
from pynput.keyboard import Key,Controller
browser = webdriver.Chrome()
browser.get('https://mma.sinopac.com/SinoCard/Activity/Register?Code=TLDI')
time.sleep(0.3)
browser.find_element_by_xpath("/html/body/app-root/div/app-activity-register/div/div[2]/div/div/section/app-activity-register-verification/form/div[1]/table/tbody/tr[3]/td/input").send_keys("1234")

Вопрос 2: Как получить элемент на кнопке во всплывающем окне с python selenium после нажатия красной кнопки?

элемент: button type = "button" class = "swal2-подтвердите swal2-style" aria-label = "" style = "background-color: rgb (48, 133, 214); border-left-color: rgb (48, 133, 214); рамка-цвет справа: rgb (48, 133, 214); "> 確定 / кнопка

Ответы [ 2 ]

0 голосов
/ 09 июля 2019

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

  • Использование CSS_SELECTOR:

    driver.get("https://mma.sinopac.com/SinoCard/Activity/Register?Code=TLDI")
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.artfld.col-all-min.ng-untouched.ng-pristine.ng-invalid[formcontrolname='id']"))).send_keys("YOYO")
    
  • Использование XPATH:

    driver.get("https://mma.sinopac.com/SinoCard/Activity/Register?Code=TLDI")
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@class='artfld col-all-min ng-untouched ng-pristine ng-invalid' and @formcontrolname='id']"))).send_keys("YOYO")
    
  • Примечание : необходимо добавить следующие операции импорта:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
  • Снимок браузера:

YOYO

0 голосов
/ 09 июля 2019

Можете ли вы использовать явное ожидание вместо time.sleep(0.3) следующим образом:

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

browser = webdriver.Chrome()

# wait for an element to appear.
wait = WebDriverWait(browser, 10)
waited_element = wait.until(EC.visibility_of_element_located((By.XPATH, xpath_of_element)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...