如何避免python selenium中的StaleElementReferenceException错误
关于这个错误有很多问题,但是没有一个能够帮助我解决这个问题 首先,我得到我需要的主url的ID如何避免python selenium中的StaleElementReferenceException错误,python,selenium-webdriver,xpath,css-selectors,webdriverwait,Python,Selenium Webdriver,Xpath,Css Selectors,Webdriverwait,关于这个错误有很多问题,但是没有一个能够帮助我解决这个问题 首先,我得到我需要的主url的ID url = 'http://www.mosquedirectory.co.uk/browse/uk/england/london' browser = webdriver.Chrome() browser.get(url) listing = browser.find_elements_by_id('directory_listingBrowse') 我将它们添加到列表中以避免出现错误,但它甚至
url = 'http://www.mosquedirectory.co.uk/browse/uk/england/london'
browser = webdriver.Chrome()
browser.get(url)
listing = browser.find_elements_by_id('directory_listingBrowse')
我将它们添加到列表中以避免出现错误,但它甚至不起作用
hold = []
for i in listing:
hold.append(i)
从这些保持列表中,我循环了for循环,这也是代码的其余部分
for i in hold:
try: ulclass = i.find_elements_by_css_selector('ul.c')
except StaleElementReferenceException:
pass
link = []
for i in ulclass:
a = i.find_element_by_tag_name('a')
link.append(a.get_attribute('href'))
for i in link:
browser.get(i)
browser.get(url)
time.sleep(2)
我甚至尝试使用try方法来避免错误,但没有再次工作。在代码的最后,我说返回到旧页面,再次避免错误。它甚至不再起作用了。我缺少哪一部分。您可以存储文本内容,而不是存储s。理想情况下,您需要引导所有元素的可见性(),您可以使用以下任一项:
- 使用
和文本属性:CSS\u选择器
driver.get("http://www.mosquedirectory.co.uk/browse/uk/england/london") print([my_elem.text for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "#directory_listingBrowse h2 a")))])
driver.get("http://www.mosquedirectory.co.uk/browse/uk/england/london") print([my_elem.text for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//div[@id='directory_listingBrowse']//h2//a")))])
- 使用
和文本属性:XPATH
driver.get("http://www.mosquedirectory.co.uk/browse/uk/england/london") print([my_elem.text for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "#directory_listingBrowse h2 a")))])
driver.get("http://www.mosquedirectory.co.uk/browse/uk/england/london") print([my_elem.text for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//div[@id='directory_listingBrowse']//h2//a")))])
- 注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
- 控制台输出:
['Barking and Dagenham (10)', 'Barnet (13)', 'Bexley (2)', 'Brent (26)', 'Bromley (4)', 'Camden (20)', 'City of London (8)', 'Croydon (17)', 'Ealing (20)', 'Enfield (10)', 'Greenwich (7)', 'Hackney (21)', 'Hammersmith and Fulham (14)', 'Haringey (12)', 'Harrow (11)', 'Havering (4)', 'Hertforshire (1)', 'Hillingdon (8)', 'Hounslow (9)', 'Islington (17)', 'Kensington and Chelsea (12)', 'Kingston upon Thames (2)', 'Lambeth (16)', 'Lewisham (3)', 'Loughton (1)', 'Merton (7)', 'Middlesex (21)', 'Newham (59)', 'Redbridge (25)', 'Richmond upon Thames (1)', 'Romford (4)', 'Southwark (13)', 'Sutton (4)', 'Tower Hamlets (76)', 'Waltham Forest (21)', 'Wandsworth (9)', 'Westminster (27)']
url = 'http://www.mosquedirectory.co.uk/browse/uk/england/london'
browser = webdriver.Chrome()
browser.get(url)
listings = WebDriverWait(browser, 30).until(EC.presence_of_all_elements_located((By.XPATH, "//div[@id='directory_listingBrowse']//ul//*//a[@href]")))
all_links = [listing.get_attribute('href') for listing in listings]
for link in all_links:
browser.get(link)
#do whatever else here
不要忘记添加这些导入:
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait