Python 索引超出范围错误:使用selenium在多个网页的元素列表中迭代页面单击
我使用Selenium在网站的连续页面上迭代元素列表。这些元素都具有相同的类名 这是我的密码:Python 索引超出范围错误:使用selenium在多个网页的元素列表中迭代页面单击,python,selenium,range,requests,beautifulsoup,scrapy,Python,Selenium,Range,Requests,Beautifulsoup,Scrapy,我使用Selenium在网站的连续页面上迭代元素列表。这些元素都具有相同的类名 这是我的密码: #set up driver driver = webdriver.Chrome(executable_path='/Applications/chromedriver') #set variable for webpages to be iterated over page = 'https://www.bandsintown.com/?came_from=257&page=' urlBu
#set up driver
driver = webdriver.Chrome(executable_path='/Applications/chromedriver')
#set variable for webpages to be iterated over
page = 'https://www.bandsintown.com/?came_from=257&page='
urlBucket = []
for i in range (0,3):
uniqueUrl = page + str(i)
urlBucket.append(uniqueUrl)
# iterate over urls
for i in urlBucket:
drivers = driver.get(i)
allelements = len(driver.find_elements_by_class_name('eventList-5e5f25ca'))
for index in range((allelements)-1):
driver.find_elements_by_class_name("eventList-5e5f25ca")[index].click()
print allelements
它给了我一个
索引器错误:列表索引超出范围
错误。试图找出原因,因为我已经将范围设置为元素列表的长度减去1。感谢您的帮助 当您第一次单击事件列表-5e5f25ca
元素时,新页面将打开,其中没有任何元素具有事件列表-5e5f25ca
类。
在驱动程序中出现错误。请按类名称(“eventList-5e5f25ca”)[索引]
行查找元素,因为元素列表为空,您尝试单击索引为1的元素
如果要获取所有事件,请首先收集链接,然后在单独的循环中打开它们:
base_url = 'https://www.bandsintown.com/?came_from=257&page='
events = []
for i in range(1, 4):
driver.get(base_url + str(i))
# get events links
event_list = driver.find_elements_by_css_selector('div[class^=eventList-] a[class^=event-]')
# collect href attribute of events in even_list
events.extend(list(event.get_attribute("href") for event in event_list))
print(len(events))
# iterate throw all events and open them.
for event in events:
driver.get(event)
您还可以通过单击查看全部按钮来避免对范围(1,3)中的i使用:
循环。如果您的目标是刮取数据而不是测试,那么可以使用刮取库(如、和等)更快地完成。所有数据都是通过简单的请求以json的形式提供的。非常感谢。这正在起作用。你能解释一下这里的^=运算符是什么意思吗?我到处找,找不到答案。另外,events.extend代码行中到底发生了什么?“扩展”是Python的一种方法吗?再次感谢您的帮助,欢迎光临
^=
表示从css选择器开始,您可以找到信息<代码>扩展列出python方法,信息为。