Мой код селена не может найти кнопки время от времени и делает в другое время, почему? - PullRequest
0 голосов
/ 08 февраля 2019

По сути, моя проблема в том, что я не могу найти свои кнопки вовремя, а в других я могу, и я вручную проверил определенно, что это не проблема iframe (даже если бы она не работала время от времени, а не на других), поэтомуя подумал, что это может быть слишком медленная и непоследовательная загрузка страницы, я установил sleep () на 5 секунд или все еще не работает.

Мой код:

def twoclicks(idoutter,idinner):
    outter = driver.find_element_by_xpath("//input[contains(@id," + idoutter + ") and @value='...']")
    outter.click()
    sleep(10)
    driver.find_element_by_id(idinner).click()
    sleep(7)

как я могу изменить егонажимать только тогда, когда отображается моя кнопка, и ждать в течение 20 секунд, если не нажата.

1 Ответ

0 голосов
/ 08 февраля 2019

Удалите sleep(), это очень плохая практика - использовать интервалы сна с жестким кодом.Измените получатели вашего элемента с помощью WebDriverWait:

def twoclicks(idoutter,idinner):
    wait = WebDriverWait(driver, 20)   # if you are going to use this interval somewhere else, define it in a higher-level scope
    wait.until(EC.presence_of_element_located((By.XPATH, "//input[contains(@id," + idoutter + ") and @value='...']"))).click()
    wait.until(EC.presence_of_element_located((By.ID, idinner))).click()

WebDriverWait.until() ожидает выполнения условия, а затем возвращает соответствующий элемент, для которого метод click() будетназывается.Он будет ждать до 20 секунд - аргумент в своем конструкторе, проверяя страницу на наличие условия каждые 500 миллисекунд.

Вам нужно будет добавить этот импорт, чтобы использовать этот подход:

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

Счастливая побуждающая !;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...