Python环境下如何实现Selenium脚本的循环执行?
Selenium脚本循环执行实现方法
以下提供两种常用的实现方案:
方案1:固定次数循环(指定执行N次)
如果你需要循环执行固定次数的操作,直接用for循环包裹函数调用逻辑即可,示例代码如下:
from selenium import webdriver import time driver = webdriver.Firefox() # 定义执行次数,这里设置为5次,可自行修改 exec_count = 5 def change_password(): driver.get("http://nsagov.ru/Users/Login.aspx") driver.find_element_by_xpath("/html/body/form/div[4]/div[1]/table/tbody/tr/td/div/table/tbody/tr[4]/td/div/a/span").click() driver.find_element_by_id("ContentPlaceHolder1_GetNewPasswordPopup_EmailTB_I").send_keys("test@mail.com") driver.find_element_by_xpath("//div[@id='ContentPlaceHolder1_GetNewPasswordPopup_TPCFm1_GetPasswordButton_CD']/span").click() # 循环执行 for i in range(exec_count): change_password() # 每次执行完间隔3秒再执行下一次,可自行调整时间 time.sleep(3) time.sleep(5) driver.quit()
方案2:无限循环(手动终止时停止)
如果需要一直执行直到你手动停止,可以用while True搭配异常捕获实现,按下Ctrl+C即可终止程序:
from selenium import webdriver import time driver = webdriver.Firefox() def change_password(): driver.get("http://nsagov.ru/Users/Login.aspx") driver.find_element_by_xpath("/html/body/form/div[4]/div[1]/table/tbody/tr/td/div/table/tbody/tr[4]/td/div/a/span").click() driver.find_element_by_id("ContentPlaceHolder1_GetNewPasswordPopup_EmailTB_I").send_keys("test@mail.com") driver.find_element_by_xpath("//div[@id='ContentPlaceHolder1_GetNewPasswordPopup_TPCFm1_GetPasswordButton_CD']/span").click() try: while True: change_password() time.sleep(3) # 捕获手动终止的信号,正常关闭浏览器 except KeyboardInterrupt: print("程序已手动终止") finally: time.sleep(5) driver.quit()
注意事项
- 如果你需要每次循环都使用全新的浏览器会话,把
driver = webdriver.Firefox()和driver.quit()逻辑移动到循环内部即可 - 新版本Selenium已废弃
find_element_by_xxx系列API,建议替换为find_element(By.属性, 值)的写法,使用前需要先导入from selenium.webdriver.common.by import By - 可根据实际需求调整两次执行之间的间隔时间,避免请求频率过高触发站点限制
内容的提问来源于stack exchange,提问作者em0ji
相关产品推荐
相关产品推荐

