Ошибка "Другой элемент получил бы щелчок" в Python - PullRequest
0 голосов
/ 19 сентября 2018

Я пытался нажать на ссылку, подобную этой:

<div class="loading" style="display:none;">
<p class="btn blue"><span>さらに表示</span></p>
<a href="javascript:void(0);" onclick="get_more();"></a>
</div>

, и я использовал этот код:

element = WebDriverWait(driver, 30).until(lambda x: x.find_element_by_css_selector(".btn.blue"))  # @UnusedVariable
element.click()

Я получил такую ​​ошибку, что я могу сделать, чтобы ее решить?

selenium.common.exceptions.WebDriverException: Message: unknown error: Element <p class="btn blue">...</p> is not clickable at point (391, 577). Other element would receive the click: <a href="javascript:void(0);" onclick="get_more();"></a>
(Session info: headless chrome=69.0.3497.100)
(Driver info: chromedriver=2.41.578737 (49da6702b16031c40d63e5618de03a32ff6c197e),platform=Windows NT 6.1.7601 SP1 x86_64)

Ответы [ 3 ]

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

Согласно HTML и вашим кодовым испытаниям вы пытались нажать на тег <span> вместо того, чтобы попытаться вызвать click() на теге <a>следующим образом:

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

    element = WebDriverWait(driver, 30).until(lambda x: x.find_element_by_css_selector("div.loading a[onclick^='get_more']"))
    element.click()
    
  • Использование xpath:

    element = WebDriverWait(driver, 30).until(lambda x: x.find_element_by_xpath("//p[@class='btn blue']/span[contains(.,'さらに表示')]//following::a[contains(@onclick,'get_more')]"))
    element.click()
    
0 голосов
/ 19 сентября 2018

Элемент, по которому вы пытаетесь щелкнуть, был покрыт каким-либо другим элементом, поэтому элемент получает щелчок вместо того, чтобы щелкнуть по фактическому элементу. Возможны следующие случаи:

  • Дело 1 .Допустим, это загрузчик, который появляется, когда вы загружаете элемент, и через некоторое время становитесь невидимым.

    Решение: Здесь вам нужно подождать, пока загрузчик станет невидимым, а затем выполнить щелчокфактический элемент

    from selenium.webdriver.support import expected_conditions as EC
    wait = WebDriverWait(driver, 10)
    element = wait.until(EC.invisibility_of_element_located((By.ID, 'loader_element_id')))
    element_button = wait.until(EC.element_to_be_clickable((By.ID, 'your_button_id')))
    element_button.click()
    
  • Дело 2 .фактический элемент не виден в пределах размера браузера и покрыт каким-либо наложенным элементом.

    Решение: Здесь вам нужно прокрутить до нужного элемента и затем нажать

    from selenium.webdriver.common.action_chains import ActionChains
    
    element = driver.find_element_by_id("your_element_id")
    
    actions = ActionChains(driver)
    actions.move_to_element(element).perform()
    

    ИЛИ можно использовать execute_script, например:

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

ИЛИ выполнить щелчок, используя javascript

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

Примечание : Пожалуйста, внесите необходимые исправления в соответствии с синтаксисом Python, если требуется.

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

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

from selenium.webdriver import ActionChains

actions = ActionChains(driver)
actions.move_to_element(element).click().perform()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...