硒:如何等待然后单击?

时间:2020-03-18 10:03:14

标签: python css-selectors selenium-chromedriver webdriverwait

我正在使用硒进行自动化,我想单击<ul>每个元素,然后等待,然后再次单击元素。这是我的代码,但似乎不是解决方案:

def navBar():
 driver=setup()
 navBar_List = driver.find_element_by_class_name("nav")
 listItem = navBar_List.find_elements_by_tag_name("li")
 for item in listItem :
    WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.TAG_NAME,"li")))
    item.click()

这是HTLM代码:

<ul class="nav navbar-nav"> 
                <li tabindex="0">
                        <a class="h">
                            <div class="icon-left-navbar">
                                 ...
                            </div>
                        </a>
                    </li>
                    <li tabindex="0">
                        <a class="h">
                            <div class="icon-left-navbar">
                                 ...
                            </div>
                        </a>
                    </li>
                    <li tabindex="0">
                        <a class="h">
                            <div class="icon-left-navbar">
                                 ...
                            </div>
                        </a>
                    </li>
                </ul>

2 个答案:

答案 0 :(得分:0)

li定义.find_elements

使用xpath来识别它们://ul[@class='nav navbar-nav']//li

使用循环,您可以利用增量来等待每个li。我想它会像下面这样产生:

(xpath)[1]
(xpath)[2]
etc...

并尝试以下代码:

listItem = WebDriverWait(driver, 30).until(EC.visibility_of_all_elements_located((By.XPATH,"//ul[@class='nav navbar-nav']//li")))

for x in range(1, len(listItem)+1):
    WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"(//ul[@class='nav navbar-nav']//li)[" +str(x) +"]"))).click()

答案 1 :(得分:0)

Thread.sleep(100)是一个选项吗?