обновлять элементы списка после каждого клика с помощью selenium / python - PullRequest
0 голосов
/ 24 марта 2020

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

selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document

это мой l oop:

catlist=["Buy & Sell", "Books", "Textbooks"]


for r in range(0,len(catlist)):

                categoryList = browser.find_element_by_xpath("//*[starts-with(@class, 'categoryList-')]")
                avilableButtons=categoryList.find_elements_by_tag_name("li")

                for text in avilableButtons:
                    if text.text == catlist[r] :
                    text.click()
                    print (r)

список категорий заменяется / обновляется (не уверен, какая здесь правильная фраза) с каждым сделанным выбором (щелчком). поэтому после каждого клика я нахожу только один неупорядоченный список с именем "categoryList-". Я пытался использовать browser.implicitly_wait(10), чтобы дать ему время, но проблема осталась прежней.

Html соответствующий код:

это код перед нажатием кнопки Buy & sell.

<ul class="categoryList-3073244717">
        <li class="categoryListItem-3726364752">
                <button class="categoryButton-3830788057 button-1997310527 button__medium-1066667140">
                        <h5 class="categoryName-958974558 level1Category-2680817441">Buy &amp; Sell</h5>
                </button>
        </li>
        <li class="categoryListItem-3726364752">
                <button class="categoryButton-3830788057 button-1997310527 button__medium-1066667140">
                        <h5 class="categoryName-958974558 level1Category-2680817441">Cars &amp; Vehicles</h5>
                </button>
        </li>

после .click() список сверху невидим / пропал, и я получаю список подкатегорий.

<ul class="categoryList-3073244717">
        <li class="categoryListItem-3726364752">
                <button class="categoryButton-3830788057 button-1997310527 button__medium-1066667140">
                        <h5 class="categoryName-958974558 level2Category-867177555">Arts &amp; Collectibles</h5>
                        <svg class="icon-459822882 actionIcon-2308908423" focusable="false" height="100%" role="img" width="100%">
                                <use xlink:href="#icon-arrow-right"></use>
                        </svg>
                </button>
        </li>
        <li class="categoryListItem-3726364752">
                <button class="categoryButton-3830788057 button-1997310527 button__medium-1066667140">
                        <h5 class="categoryName-958974558 level2Category-867177555">Books</h5>
                </button>
        </li>

веб-сайт Kijiji.ca, который в основном похож на craiglist.

1 Ответ

0 голосов
/ 25 марта 2020

Я наткнулся на это сообщение в блоге после еще нескольких поисков и вопросов к Google. http://darrellgrainger.blogspot.com/2012/06/staleelementexception.html

Здесь описана та же проблема, теперь с добавленным оператором l oop и попыткой / исключением она работает!


categoryToPost=["Buy & Sell", "Books", "Textbooks"]
attempts=0

for r in range(0,len(categoryToPost)):

    while attempts <2:
        categoryList = browser.find_element_by_xpath("//*[starts-with(@class, 'categoryList-')]")
        availableButtons = categoryList.find_elements_by_tag_name("li")
        try:
            for text in availableButtons:
                if text.text==categoryToPost[r]:
                    print (text.text)
                    text.click()
                    attempts=0

        except EC.StaleElementReferenceException:

            attempts+=1
            break

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