首页 > 解决方案 > Python selenium webdriver:列表索引超出范围最多5个元素

问题描述

您好,我在 twitter 上使用 selenium 单击多个回复按钮,driver.find_elements_by_xpath 我面临的问题是我只能单击 5 个元素,而不能更多。这是清单的印刷品

[<selenium.webdriver.remote.webelement.WebElement (session="cc78e4de72bea5cfc9499af03f3e9271", 
element="c9beaf38-e9a9-46af-baa8-eff476c87be8")>, <selenium.webdriver.remote.webelement.WebElement 
(session="cc78e4de72bea5cfc9499af03f3e9271", element="7cd7649f-efc5-48b5-9e68-3d97a96e72cc")>, 
<selenium.webdriver.remote.webelement.WebElement (session="cc78e4de72bea5cfc9499af03f3e9271", 
element="6d1e9ce9-9b17-4f69-8c49-0805331549fd")>, <selenium.webdriver.remote.webelement.WebElement 
(session="cc78e4de72bea5cfc9499af03f3e9271", element="1c4f540d-2dfe-4ed5-80ba-01bf5ba1a389")>, 
<selenium.webdriver.remote.webelement.WebElement (session="cc78e4de72bea5cfc9499af03f3e9271", 
element="0eaa0f99-0e62-45cf-bc57-fef86ac30e03")>]

你可以清楚地数出5个元素

这是我的代码

reply1 = driver.find_elements_by_xpath('//div[@data-testid="reply"]/div/div[1]')
count = 0
reply1[count].click()
                
                
count = count + 1
print (count)
print(reply1)
sleep(4)
driver.back()


except common.exceptions.ElementClickInterceptedException:
   time.sleep(2)                                                                          
   driver.execute_script("window.scrollTo(0, window.scrollY + 200)")                             
   time.sleep(2)
                

我收到了这个错误:

reply1[count].click()
IndexError: list index out of range
PS C:\Users\92\Desktop\new features test\new feature> 
[7300:18956:0320/013757.708:ERROR:ssl_client_socket_impl.cc(924)] handshake failed; returned -1, SSL 
error code 1, net_error -101

更新:我做了一些更改,代码正在处理 9 个元素,

count = 0 

running = True
while running:
 
            

    loop = True
    while loop:

    reply1 = driver.find_elements_by_xpath('//div[@data-testid="reply"]/div/div[1]')
    
    reply = reply1[count] 

    sleep(1)
    
    
    print(reply)
    reply1[count].click()

    #comment_buttons[count].click()

    
    sleep(4)


    driver.back()
    loop = False
    

count = count + 1
print (count)

           
sleep(1) 
time.sleep(2)  
                                                                     
driver.execute_script("window.scrollTo(0, window.scrollY + 200)")
                                               
print ("d2")                        
time.sleep(2)

打开 9 个元素后,我收到此错误:

Traceback (most recent call last):
File "c:\Users\92\Desktop\new features test\new feature\test copy.py", line 
155, in <module>
reply = reply1[count]
IndexError: list index out of range

标签: pythonseleniumerror-handlingwebdriver

解决方案


我尝试了 2 种类型,在ElementClickInterceptedException打开 7 条评论按钮后出现的第一个代码中,我尝试通过滚动来处理它,但它一直在滚动,最大的问题是,在这两种情况下,推文显然都没有加载背景

for _ in range(6):         # loop as many times as you want to scroll
tweets = driver.find_elements_by_xpath('//div[@data-testid="reply"]/div/div[1]')
for tweet in tweets:

    tweet.click()
    sleep(2)
    driver.back()
driver.execute_script("window.scrollTo(0, window.scrollY + 200)")
sleep(3)

我尝试的第二个代码正在处理 11 个评论按钮然后IndexError: list index out of range来了

 count = 0 
 for _ in range(20):
     try:

 
          
    tweets = driver.find_elements_by_xpath('//div[@data-testid="tweet"]/div/div[1]')
    print(tweets)
    for tweet in tweets:
        reply = driver.find_elements_by_xpath('//div[@data-testid="reply"]/div/div[1]')
        reply[count].click()
        #print(reply)
        sleep(2)
        driver.back()
        
        count = count + 1
        print(count)
    driver.execute_script("window.scrollTo(0, window.scrollY + 200)")
    sleep(3)



  except common.exceptions.ElementClickInterceptedException:
        
        time.sleep(2)                                                                          
        driver.execute_script("window.scrollTo(0, window.scrollY + 200)")
        
        print ("except ! ")                              
        time.sleep(2)  

推荐阅读