使用Python中的Selenium webdriver在循环中单击具有相同链接文本的链接

时间:2014-09-18 14:43:19

标签: python-2.7 selenium-webdriver web-scraping

我使用以下代码滚动页面并关注quora上的用户(链接到页面:http://www.quora.com/Kevin-Rose/followers),向下滚动后会加载一定数量的用户,我使用下面给出的代码:< / p>

# find all the follow buttons that are loaded
button = driver.find_elements_by_xpath("//a[contains(text(), 'Follow')]")

#number of users loaded
no_of_followers = len(button)

#execute the code till all the users are followed
while(no_of_followers > 0):

    count = 0
    #follow all the users loaded by clicking follow button in a loop 
    while(count < no_of_followers):

        button[count].click()
        time.sleep(30)
        print count
        count = count + 1

    #scroll down        
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    time.sleep(30)'
    #find newly loaded users
    button = driver.find_elements_by_xpath("//a[contains(text(), 'Follow')]")
    time.sleep(30)
    #tracking no of users left unfollowed
    no_of_followers = len(button)

我收到以下错误:

  

StaleElementReferenceException:消息:u'Element不再附加到DOM'; Stacktrace:

编辑1 :我尝试使用find_element_by_link _text,但显然函数的输出对象不是可以迭代的链接列表。

1 个答案:

答案 0 :(得分:1)

可能的问题是@ button [count] .click()。 我建议你使用for循环而不是while,并使用迭代器增加。

执行类似

的操作

//你基本上需要一直点击第一个项目。迭代器应该只控制迭代次数

 Driver.FindElement(By.Xpath("Your Xpath")).Click();

抱歉,不是python的专家。