Python selenium webdriver:列表索引超出范围

时间:2017-07-20 22:13:31

标签: python selenium selenium-webdriver

我有以下代码向下滚动启用javascript的网站。问题是当newHeight到达229275左右时,我会在browser.find_elements_by_class_name('alt')[0].click()行的列表中超出范围。但为什么我会收到此错误,我该如何解决?

我的代码:

browser = webdriver.PhantomJS("phantomjs")
    browser.get(url)
        while True:            
         time.sleep(pause)
         newHeight = browser.execute_script("return document.body.scrollHeight")
         print newHeight
         browser.find_elements_by_class_name('alt')[0].click()

3 个答案:

答案 0 :(得分:1)

尝试向下滚动页面,然后点击以下方法点击元素:

from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait as wait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import NoSuchElementException

browser = webdriver.PhantomJS("phantomjs")
browser.get(url)
while True:
    browser.find_element_by_tag_name("body").send_keys(Keys.END)
    try:
        wait(browser, 10).until(EC.element_to_be_clickable((By.CLASS_NAME, "alt"))).click()
    except NoSuchElementException:
        break

这应该允许您单击所需的元素以防它可以找到或者中断循环

答案 1 :(得分:0)

只需尝试/除语句

browser = webdriver.PhantomJS("phantomjs")
browser.get(url)
    while True:   
     try:
        time.sleep(pause)
        newHeight = browser.execute_script("return document.body.scrollHeight")
        print newHeight
        browser.find_elements_by_class_name('alt')[0].click()
     except:
        pass

答案 2 :(得分:0)

我建议在采取行动之前检查清单。

browser = webdriver.PhantomJS("phantomjs")
browser.get(url)
while True:            
    time.sleep(pause)
    newHeight = browser.execute_script("return document.body.scrollHeight")
    print newHeight
    alt_elements = browser.find_elements_by_class_name('alt')
    if len(alt_elements):
        alt_elements[0].click()

只是旁注,无限循环可能是一件危险的事情。