Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 索引超出范围错误:使用selenium在多个网页的元素列表中迭代页面单击_Python_Selenium_Range_Requests_Beautifulsoup_Scrapy - Fatal编程技术网

Python 索引超出范围错误:使用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

我使用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='
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方法,信息为。