Как нажать кнопку «Добавить в корзину» в соответствии с заданным HTML? - PullRequest
0 голосов
/ 03 июля 2018

Мой сценарий Selenium Python не может нажать кнопку «Добавить в корзину».

HTML код :

<input type="button" value="Add to cart" title="Add to cart" 
class="button-2 product-box-add-to-cart-button" onclick="AjaxCart.addproducttocart_catalog
('/addproducttocart/catalog/18/1/1');return false;">

Мой сценарий :

inputElement = driver.find_element_by_xpath("/html/body/div[7]/div[4]/div[2]/div[1]/div/div[2]/div[4]/div/div[3]/div/div[2]/div[3]/div[2]/input[3]")
inputElement.click()

Это ошибка, которую я получаю:

File "C:\Users\Raghav\AppData\Local\Programs\Python\Python36-32\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: Element <input type="button" value="Add to cart" title="Add to cart" class="button-2 product-box-add-to-cart-button" onclick="AjaxCart.addproducttocart_catalog('/addproducttocart/catalog/18/1/1');return false;"> is not clickable at point (1334, 635). Other element would receive the click: <div class="page-loader" style="opacity: 0.924946;">...</div>

Ответы [ 3 ]

0 голосов
/ 03 июля 2018

В соответствии с HTML, которым вы поделились, нажмите на элемент, который вам нужен, чтобы вызвать WebDriverWait , чтобы желаемый элемент был кликабельным , и вы можете использовать следующее решение:

  • CSS_SELECTOR:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.button-2.product-box-add-to-cart-button[title='Add to cart']"))).click()
    
  • XPATH:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@class='button-2 product-box-add-to-cart-button' and @title='Add to cart']"))).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 голосов
/ 04 июля 2018

Ваш xpath правильный, он получает значение, но не может щелкнуть. Для этого вы можете использовать метод действия, чтобы щелкнуть по нему.

Вам нужно заменить событие клика классом действия, который решит это исключение

Метод действия для нажатия:

from selenium.webdriver.common.action_chains import ActionChains

actions = ActionChains(driver)
actions.move_to_element("Element to Click").click().perform()

Но, Вы использовали абсолютный xpath, который никогда не был хорошим вариантом для использования. Вам нужно использовать Относительный xpath, как указано ниже или как упоминалось @ DebanjanB .

Относительный xpath вместо абсолютного:

//input[@title='Add to cart' and @value='Add to cart']
0 голосов
/ 03 июля 2018

Попробуйте это:

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait

element = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[7]/div[4]/div[2]/div[1]/div/div[2]/div[4]/div/div[3]/div/div[2]/div[3]/div[2]/input[3]")))
element.click()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...