Python selenium-如何在多个页面上重复选择按钮-元素不可见

Python selenium-如何在多个页面上重复选择按钮-元素不可见,python,selenium,Python,Selenium,从第2页开始,每个网页包含1-5个比例(5个按钮),格式完全相同。当代码运行到第3页时,会出现如下错误: import selenium from selenium import webdriver from selenium.webdriver.common.keys import Keys browser = webdriver.Chrome() browser.get('https://wj.qq.com/s/2214142/51db') # survey link # First p

从第2页开始,每个网页包含1-5个比例(5个按钮),格式完全相同。当代码运行到第3页时,会出现如下错误:

import selenium
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

browser = webdriver.Chrome()
browser.get('https://wj.qq.com/s/2214142/51db') # survey link

# First page - click "Next" button, it works
NextButton = browser.find_element_by_class_name('survey_nextpage') # got to next page
NextButton.click()


# Second page - click one of the scale button between 1-5
answers = browser.find_elements_by_class_name('star_item') # it works
answers[4].click() # it works

NextButton.click() # it works


# Third page - click one of the scale button as 2nd page
answers = browser.find_elements_by_class_name('star_item') # either with or without this statement, the next line will give error
answers[2].click() # it throws error

NextButton.click()
因为我已经抓住了第2页上的答案选项,我不知道为什么它对第3页有效,因为第3页的比例格式与第2页完全相同

我如何重复应用相同的方法,选择一个选项,以相同的调查格式在接下来的5页


任何建议都将不胜感激。谢谢

问题是页面上有70个元素的类名为
star\u item
。当你试图点击第二页时,
答案[2]。点击()
实际上它是第一页的第三个元素,当然它不再可见了。因此,您必须更改选择器,或使用此解决方案:

正如我看到的,每页上有5个元素,因此您可以这样处理您的问题:

ElementNotVisibleException: element not visible
  (Session info: chrome=67.0.3396.87)
  (Driver info: chromedriver=2.40.565498 (ea082db3280dd6843ebfb08a625e3eb905c4f5ab),platform=Windows NT 10.0.17134 x86_64)

代码说明:如果我们知道每个页面上有5个元素,并且使用这个定位器我们选择了70个元素,那么70/5=14个页面上就有这个元素。因此,为了能够在特定页面上单击正确的70元素,我们引入了一个变量来计算已经完成的页面。此变量是
add
。通过每一页后,它将增加到5。

Andrei,非常感谢您的快速回复。我刚试过。看来最后一行行不通。它给出的错误如下:
TypeError:find_element()参数after*必须是一个可编辑的,而不是WebElement
如果我将
answers[2]
更改为“answers”,错误将是这样的:
TypeError:find_element()从1到3个位置参数,但给出了71个
@Andrei SuvorkovYes,我也注意到了这一点,等几分钟。我想我已经发现了问题
element=wait.until(EC.element\u to\u be\u clickable((By.ID,'option\u q-2-h6F2\u 4'))元素。click()
如果我使用每个选项的ID尝试这种方法,它将给出TimeoutException。我已经发现了问题。请看一看
add = 0 # value to add
NextButton = browser.find_element_by_class_name('survey_nextpage') # got to next page
NextButton.click()


# Second page - click one of the scale button between 1-5
# you don't have to locate this elements on every page, only once
answers = browser.find_elements_by_class_name('star_item') # locate all elements 
answers[4 + add].click() # it will peek an item 4 plus add value
add += 5 # increase the value at 5

NextButton.click()


# Third page - click one of the scale button as 2nd page
answers[2 + add].click()
add += 5
NextButton.click()