我试图在这里逐一进入每个城市,但在程序从第一页返回后,它没有进入下一页并显示StaleElementReferenceException
错误。
这是我的代码:
url = "https://www.agoda.com/region/punjab-province-pk.html"
s=Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=s)
driver.implicitly_wait(5)
driver.get(url)
a = ActionChains(driver)
cities = driver.find_elements(By.CSS_SELECTOR, value='dt[data-selenium="neighbor-name"]')
for city in cities:
print(city.text)
a.double_click(city).perform()
print(driver.current_url)
driver.back()
即使当我只是打印list中的元素时,它也会显示所有元素,但是当我编写这些用于向前和向后导航的代码行时,它不会打印或单击。
我在这里做错了什么?
如有任何帮助,不胜感激。
当你通过点击city
进入另一个页面时,所有最初在cities
列表中收集的web元素在主页面都变得陈旧。在Selenium中,Web Element实际上是对物理Web元素的引用。当你回到主页时,它会被重新渲染,所以之前收集到的web元素的引用不再指向这些元素。
要使您的代码工作,您需要在返回主页面时再次收集cities
列表。
下面的代码应该可以工作:
cities = driver.find_elements(By.CSS_SELECTOR, value='dt[data-selenium="neighbor-name"]')
for idx, city in enumerate(cities):
city = cities[idx]
print(city.text)
a.double_click(city).perform()
print(driver.current_url)
driver.back()
cities = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, 'dt[data-selenium="neighbor-name"]')))