我有以下代码向下滚动启用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()
答案 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()
只是旁注,无限循环可能是一件危险的事情。