- Я не могу нажать кнопку - PullRequest
0 голосов
/ 16 января 2020

Я пытался заставить это работать в течение пары часов. это мой первый настоящий проект python, так что, да, хотелось бы помочь.

HTML

<input type="button" id="lyca_cart_newsim_button1" value="FORTSÆT" class="et_pb_more_button et_pb_button lyca_cart_topup_summary" onclick="nc_newsim_open_tab2('payment','sid','tid')">

xpath

//*[@id='lyca_cart_newsim_button1']

Это приводит к появлению элемента error "not Interactive "

driver.find_element_by_xpath("//*[@id='lyca_cart_newsim_button1']").click()

Это не вызывает ошибок, но не нажимает кнопку

element = driver.find_element_by_xpath("//*[@id='lyca_cart_newsim_button1']")

driver.execute_script("arguments[0].click();", element)

Это время ожидания

WebDriverWait(driver, 10).until(EC.element_to_be_clickable

Первый дает element not interactable и второй не дает ошибок.

Я использую это в более ранней точке кода и там работает нормально,

element = driver.find_element_by_xpath("//*[@id='lyca_cart_newsim_button1']")
driver.execute_script("arguments[0].click();", element)

Ответы [ 2 ]

0 голосов
/ 16 января 2020

Пожалуйста, подтвердите, что кнопка находится в теге iframe. если он находится в iframe, вы должны переключиться на iframe

, если он не находится в iframe, попробуйте использовать приведенный ниже код, он может работать

driver.execute_script("$('#lyca_cart_newsim_button1').click()");
0 голосов
/ 16 января 2020

Мне никогда не удавалось использовать ожидаемые условия от селена, особенно в ожидании нажатия на элемент. Что бы я ни сделал, лучше это или нет, но это сработало, когда все oop пытались щелкнуть мышью и продолжали попытки в течение определенного времени. Вот что я использую в C#:

int timeToTryMilliseconds = 5000;
bool timeNotExpired = true;
Stopwatch sw = new Stopwatch();
sw.Start();

while (timeNotExpired)
     {
          try
               {
                   driver.FindElement(By.XPath("//*[@id='lyca_cart_newsim_button1']").click()
                   break;
               }
          catch
               {
                    // Half second wait, so it's not polling constantly
                    System.Threading.Thread.Sleep(500);
                    timeNotExpired = timeToTryMilliseconds > sw.ElapsedMilliseconds;
               }
     }

Если есть лучший способ, я бы с удовольствием его использовал.

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