как исправить цикл while, который нажимает кнопку, но выдает «ElementClickInterceptedException:» после первой итерации - PullRequest
0 голосов
/ 11 июля 2019

Я занимаюсь веб-обработкой https://www.virginmobile.ca/en/phones/phone-details.html#!/a70/Black/128/MTH. Я пытаюсь получить цену в разделе "Выберите свой ежемесячный телефонный план", однако, когда я выбираю опцию "купить свой телефон авансом", в планах ниже есть кнопка "посмотреть больше планов" которую я пытаюсь нажать. Мне удалось щелкнуть по нему, однако иногда есть еще планы, и мой цикл while, кажется, не щелкает по нему, если кнопка все еще существует. вместо этого трассировка гласит:

Элемент showitems "ng-click =" showmoreplans () "ng-bind-html =" messages ['phonedetail.seemoreplan.label'] "class =" ng-binding ng-scope "> ... не активируется в точке (620, 870). Другой элемент получит щелчок: ...

    for planType in planTypeRawList:
        planPriceList = []

        ActionChains(driver).move_to_element(planType).click().perform()
        time.sleep(0.5)

        while True:
            try:
                see_more_plans = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, '#planList > a')))
                see_more_plans[0].click()
                print('see More Clicked')
                time.sleep(0.5)

            except TimeoutException:
                break

        planPriceListRaw = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, '#planList .price')))

        for price in planPriceListRaw:
            planPrice = price.text
            planPriceList.append(planPrice)

        print(planPriceList)
        print('end of plan type')

В конечном итоге я хотел бы иметь возможность нажимать на опцию «видеть больше планов» столько раз, сколько она появляется, а затем переходить к очистке после того, как все планы будут видны и кнопка исчезнет.

1 Ответ

0 голосов
/ 11 июля 2019

Вы можете перейти к элементу, используя метод location_once_scrolled_into_view, прежде чем щелкнуть.

измените свой код, как показано ниже.

see_more_plans = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, '#planList > a')))
# you don't have to scroll to element when you are using the javascript
driver.execute_script("arguments[0].click();",see_more_plans[0])
print('see More Clicked')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...