Selenium-webdriver脚本中断循环



我的任务是修复办公室里运行的一个数字符号循环。由于操作系统崩溃,原始脚本丢失了,我不得不重新创建它。我在我的python限制修复我已经能够使用硒创建。

我写了下面的脚本,它在循环中断之前随机运行一段时间,脚本必须再次执行。

import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
website = ["https://www.fireeye.com/cyber-map/threat-map.html",
"https://horizon.netscout.com/?sidebar=close",
"https://www.accuweather.com/en/us/minneapolis/55415/hourly- 
weather-forecast/348794?=page",
"https://www.accuweather.com/en/us/minneapolis/55415/daily- 
weather-forecast/348794?=page"
]
driver = webdriver.Chrome(r'/usr/bin/chromedriver') 
driver.get(website[0])
driver.maximize_window()
driver.execute_script("window.open('about:blank', 'secondtab');")
driver.switch_to.window("secondtab")
driver.get(website[1])
driver.execute_script("window.open('about:blank', 'thirdtab');")
driver.switch_to.window("thirdtab")
driver.get(website[2])
driver.execute_script("window.scrollBy(0,250);")
driver.execute_script("window.open('about:blank', 'fourthtab');")
driver.switch_to.window("fourthtab")
driver.get(website[3])
driver.execute_script("window.scrollBy(0,100);")

谁能告诉我为什么循环中断了?

循环是一个while true条件:

while True:
if "FireEye" in driver.title:
time.sleep(20)
driver.switch_to.window(driver.window_handles[1])

elif "Attack" in driver.title:
time.sleep(20)
driver.switch_to.window(driver.window_handles[2])

elif "Hourly" in driver.title:
time.sleep(10)
driver.switch_to.window(driver.window_handles[3])

elif "Daily" in driver.title:
time.sleep(10)
driver.switch_to.window(driver.window_handles[0])

条件是检查每个网站的网页标签标题,因为每个都应该总是正确的。

它以随机间隔返回以下回溯错误:

* driver.switch_to.window (driver.window_handles [3])

IndexError: list index out of range*

我无法确定是什么原因导致索引不再工作。

在下面,python认为没有打开第四个窗口。首先,让我们加入一些错误处理,像这样:

while True:
try:
if "FireEye" in driver.title:
time.sleep(20)
driver.switch_to.window(driver.window_handles[1])

elif "Attack" in driver.title:
time.sleep(20)
driver.switch_to.window(driver.window_handles[2])

elif "Hourly" in driver.title:
time.sleep(10)
driver.switch_to.window(driver.window_handles[3])

elif "Daily" in driver.title:
time.sleep(10)
driver.switch_to.window(driver.window_handles[0])
except:
foreach w in driver.window_handles:
print("{} is open!".format(w))

不管出错与否,这至少会继续循环,并告诉您它认为打开了哪些选项卡。

编辑:另外,作为一个注释,window_handles是不排序的。所以在一个迭代中可能是window_handles[1]的东西在下一个迭代中可能会以window_handles[3]结束。

最新更新