Невозможно вызвать метод щелчка на выбранном элементе - PullRequest
0 голосов
/ 20 ноября 2018

Мне нужно нажать на определенную кнопку на странице Google MyBusiness.Проблема в том, что щелчка не происходит.

На снимке экрана показана кнопка, которая должна быть сфокусирована.HTML-код элемента:

<div role="button" class="U26fgb zg hx mZ r2" jscontroller="VXdfxd" jsaction="click:cOuCgd; mousedown:UX7yZ; mouseup:lbsD7e; mouseenter:tfO1Yc; mouseleave:JywGue;touchstart:p6p2H; touchmove:FwuNnf; touchend:yfqBxc(preventMouseEvents=true|preventDefault=true); touchcancel:JMtRjd;focus:AHmuwe; blur:O22p3e; contextmenu:mg9Pef;"
    jsshadow="" jsname="BddwAf" aria-label="Remove" aria-disabled="false" tabindex="0">
    <div class="Ci he" jsname="ksKsZd"></div>
    <content class="gx"><span style="top: -12px"><svg xmlns="https://www.w3.org/2000/svg" width="24" height="24"
                viewBox="0 0 24 24">
                <path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"></path>
                <path d="M0 0h24v24H0z" fill="none"></path>
            </svg></span></content>
</div>

Я попытался выполнить широкий поиск похожих элементов с помощью следующего селектора:

hoursdiv = driver.find_elements_by_xpath('//div[@role = "button"]')
    for el in hoursdiv:
        print(el)
        el.click

Вывод:

<selenium.webdriver.remote.webelement.WebElement (session="837341007f4b88350c3449e07e291d82", element="0.27450440234933726-5")>
<selenium.webdriver.remote.webelement.WebElement (session="837341007f4b88350c3449e07e291d82", element="0.27450440234933726-6")>
<selenium.webdriver.remote.webelement.WebElement (session="837341007f4b88350c3449e07e291d82", element="0.27450440234933726-7")>
<selenium.webdriver.remote.webelement.WebElement (session="837341007f4b88350c3449e07e291d82", element="0.27450440234933726-8")>
<selenium.webdriver.remote.webelement.WebElement (session="837341007f4b88350c3449e07e291d82", element="0.27450440234933726-9")>
<selenium.webdriver.remote.webelement.WebElement (session="837341007f4b88350c3449e07e291d82", element="0.27450440234933726-10")>
<selenium.webdriver.remote.webelement.WebElement (session="837341007f4b88350c3449e07e291d82", element="0.27450440234933726-11")>
<selenium.webdriver.remote.webelement.WebElement (session="837341007f4b88350c3449e07e291d82", element="0.27450440234933726-12")>
<selenium.webdriver.remote.webelement.WebElement (session="837341007f4b88350c3449e07e291d82", element="0.27450440234933726-13")>
<selenium.webdriver.remote.webelement.WebElement (session="837341007f4b88350c3449e07e291d82", element="0.27450440234933726-14")>
<selenium.webdriver.remote.webelement.WebElement (session="837341007f4b88350c3449e07e291d82", element="0.27450440234933726-15")>
<selenium.webdriver.remote.webelement.WebElement (session="837341007f4b88350c3449e07e291d82", element="0.27450440234933726-16")>
<selenium.webdriver.remote.webelement.WebElement (session="837341007f4b88350c3449e07e291d82", element="0.27450440234933726-17")>
<selenium.webdriver.remote.webelement.WebElement (session="837341007f4b88350c3449e07e291d82", element="0.27450440234933726-18")>
<selenium.webdriver.remote.webelement.WebElement (session="837341007f4b88350c3449e07e291d82", element="0.27450440234933726-19")>
<selenium.webdriver.remote.webelement.WebElement (session="837341007f4b88350c3449e07e291d82", element="0.27450440234933726-20")>
<selenium.webdriver.remote.webelement.WebElement (session="837341007f4b88350c3449e07e291d82", element="0.27450440234933726-21")>
<selenium.webdriver.remote.webelement.WebElement (session="837341007f4b88350c3449e07e291d82", element="0.27450440234933726-22")>
<selenium.webdriver.remote.webelement.WebElement (session="837341007f4b88350c3449e07e291d82", element="0.27450440234933726-23")>
<selenium.webdriver.remote.webelement.WebElement (session="837341007f4b88350c3449e07e291d82", element="0.27450440234933726-24")>
<selenium.webdriver.remote.webelement.WebElement (session="837341007f4b88350c3449e07e291d82", element="0.27450440234933726-25")>
<selenium.webdriver.remote.webelement.WebElement (session="837341007f4b88350c3449e07e291d82", element="0.27450440234933726-26")>
<selenium.webdriver.remote.webelement.WebElement (session="837341007f4b88350c3449e07e291d82", element="0.27450440234933726-27")>
<selenium.webdriver.remote.webelement.WebElement (session="837341007f4b88350c3449e07e291d82", element="0.27450440234933726-28")>
<selenium.webdriver.remote.webelement.WebElement (session="837341007f4b88350c3449e07e291d82", element="0.27450440234933726-29")>

Но элемент не нажимается.HTML-код раздела, в котором отображаются эти элементы, загружен здесь .

enter image description here

Ответы [ 3 ]

0 голосов
/ 20 ноября 2018

Полагаю, ожидание - не ваша проблема, для этого нужно два клика, div и <content class="gx">

0 голосов
/ 20 ноября 2018

Элемент, на который вы пытаетесь щелкнуть, является JavaScript включенным элементом, поэтому вы должны заставить WebDriverwait для элемента быть активным , и вы можетеиспользуйте любое из следующих решений:

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

    hoursdiv = WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "div[role='button'][aria-label='Remove']")))
    for el in hoursdiv:
        print(el)
        el.click()
    
  • Использование XPATH:

    hoursdiv = WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//div[@role='button' and @aria-label='Remove']")))
    for el in hoursdiv:
        print(el)
        el.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 голосов
/ 20 ноября 2018

Попробуйте дождаться появления модального окна с кнопками X и используйте более точный локатор для выбора кнопок:

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

buttons = WebDriverWait(driver, 10).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, 'div[arial-label="Remove"] svg')))
for button in buttons:
    button.click()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...