Python定义的函数,其中包含range()';我不能如愿工作

Python定义的函数,其中包含range()';我不能如愿工作,python,pandas,selenium,Python,Pandas,Selenium,我有一个本地excel文件,其中包含我想要访问的网站的100个URL,并在页面循环时从中提取信息。为了不在NoSuchElementException错误后复制代码,我决定创建一个用户定义的函数,该函数将在错误发生后调用,因此它将从列表中的下一个URL重新开始,但由于某些原因,range()函数不起作用,并且在错误发生后,它会不断地反复刷新相同的URL(范围0)。 有人能解释一下为什么它忽略了range(),而只是爬行一个URL,即使我已经声明范围是0到100?我怎样才能修好它 import p

我有一个本地excel文件,其中包含我想要访问的网站的100个URL,并在页面循环时从中提取信息。为了不在NoSuchElementException错误后复制代码,我决定创建一个用户定义的函数,该函数将在错误发生后调用,因此它将从列表中的下一个URL重新开始,但由于某些原因,range()函数不起作用,并且在错误发生后,它会不断地反复刷新相同的URL(范围0)。 有人能解释一下为什么它忽略了range(),而只是爬行一个URL,即使我已经声明范围是0到100?我怎样才能修好它

import pandas as pd
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
import time

driver = webdriver.Chrome('C:/Users/Acer/Desktop/chromedriver.exe')
df = pd.read_excel('C:/Users/Acer/Desktop/New folder/urls.xlsx')
crawl = df['url'].tolist()

def my_function():

    for i in range(0,100):
        
        driver.get(crawl[i])      
        driver.implicitly_wait(10)
        
        
        while True:
            try:
                
                page = driver.find_element_by_xpath('//a[@data-track-name="Next"]').click()
                time.sleep(5)
                
                                         
            except NoSuchElementException:
            
                my_function()


my_function()

for循环没有什么问题,只是可以将范围(100)中的i简化为
。你的问题是,你的while循环永远不会中断,而在没有页面可供导航后,循环会中断。然后它抛出一个错误,我通过重新启动一个函数来处理这个错误,但问题是,重新启动后,它访问相同的URL(范围为0)并再次导航到EverMind-你是对的,我真傻。我已经包含了“break”语句,现在它可以工作了!谢谢我想,当你递归调用
my_函数时,你期望
i
以一个非零的值开始,从调用方停止的地方开始。如果需要,请重新编码my_函数
,以接受起始值作为默认值为零的参数。
import pandas as pd
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
import time

driver = webdriver.Chrome('C:/Users/Acer/Desktop/chromedriver.exe')
df = pd.read_excel('C:/Users/Acer/Desktop/New folder/urls.xlsx')
crawl = df['url'].tolist()

def my_function():

    for i in range(0,100):
        
        driver.get(crawl[i])      
        driver.implicitly_wait(10)
        
        
        while True:
            try:
                
                page = driver.find_element_by_xpath('//a[@data-track-name="Next"]').click()
                time.sleep(5)
                
                                         
            except NoSuchElementException:
                break
                my_function()


my_function()