我正在使用以下代码检索我的链接:
os.environ['MOZ_HEADLESS'] = '1'
binary = FirefoxBinary('C:\\Program Files\\Mozilla Firefox\\firefox.exe', log_file=sys.stdout)
self.driver = webdriver.Firefox(firefox_binary=binary, executable_path='C:/chromedriver/geckodriver')
self.driver.get(link)
接下来,我呼吁:
xpath=".//a[@class='tileLink']"
ignored_exceptions = (NoSuchElementException, StaleElementReferenceException,)
your_element = WebDriverWait(self.driver, 30, ignored_exceptions=ignored_exceptions).until(
expected_conditions.presence_of_element_located((By.XPATH, xpath)))
然后
links = self.driver.find_elements_by_xpath(".//a[@class='tileLink']")
for link in links:
href_ = link.get_attribute("href") # <<-- Error ehre
并且link.get_attribute(属性)
抛出过时的元素异常。
现在,考虑到WebDriverWait
,我本以为可以避免这个问题,但它仍然存在。
我很想在加载页面源代码后,将其放入lxml中,以完全避免这个问题。
建立链接
和迭代链接之间的时间最多为一秒钟。
有没有其他人遇到过这样的问题,并找到了解决方案?
感谢您的指导。
我有一个类似的问题,页面上的一些可移动按钮过时了。
比如:
from selenium.common.exceptions import StaleElementReferenceException
from selenium.webdriver.common.action_chains import ActionChains
hrefs = []
for index, link in enumerate(links):
attempts = 0
while True:
try:
for action in range(0, 10):
ActionChains(context.browser). \
move_to_element(links[index]).click().perform()
href_ = link.get_attribute("href")
if href_:
hrefs.append(href_)
break
break
except StaleElementReferenceException:
attempts += 1
if attempts > 10:
break
我意识到这是一个非常粗糙(原始,甚至)的解决方案,并假设元素变得“不过时”是一个时间问题。我也不太擅长Python,所以这可能需要一些调整。。。
考虑一下,由于这些元素是链接,可能您不想单击它们,在这种情况下,请从ActionChains行中删除click()
位,或者将其更改为context\u click()
。
如果我理解了您的问题,您需要从xpath//a[@class='tileLink']
标识的所有元素中获取href
属性。要实现这一点,可以使用以下代码块:
# xpath=".//a[@class='tileLink']"
# ignored_exceptions = (NoSuchElementException, StaleElementReferenceException,)
# links = WebDriverWait(self.driver, 30, ignored_exceptions=ignored_exceptions).until(expected_conditions.presence_of_element_located((By.XPATH, xpath)))
links = WebDriverWait(self.driver, 30).until(expected_conditions.visibility_of_all_elements_located((By.XPATH, "//a[@class='tileLink']")))
for link in links:
print(link.get_attribute("href"))
我试图自动化一个场景,条件是我必须选择所有下拉选项,然后逐个单击这些选项。我尝试了代码,但它只点击了第一个选项,。将错误显示为陈旧元素是不可点击的。请帮忙。
大家好,我正在使用selenium webdriver,在运行下面的脚本时,我在脚本中突出显示的位置遇到了陈旧元素异常错误。 我的脚本停在那里,我不能运行。 错误消息为-Stale元素异常错误。在缓存中找不到该元素,可能是页面在查找后发生了更改。 在这种情况下,请任何人帮助我,并指导我纠正这个错误。 你好Vignesh K S
好的,我阅读了所有其他的链接,我尝试了上述不同解决方案的变体,但是它们都不适合我。 我的问题是,我有以下代码: 然而,我得到了以下错误: 这是篮子图标的css路径,它在菜单上。 网站是GWT,步骤如下:1。点击物品添加到购物篮2。增加到第三篮。点击篮子进入篮子。 然而,我似乎无法做到这一点。
我正在使用for循环来处理表元素。在第一次迭代中,它将在页面上搜索所需的元素。如果该元素在该页面上不可用,那么它将在第二个页面上搜索。如果元素在第一个页面上可用,Webdriver会成功地找到该元素,但如果元素在第一个页面上不可用,则它会在第二个页面上查找该元素。但在这里,for循环失败,出现称为“stale Element exception”的异常。 错误消息: 线程“main”org.ope
下面是我正在努力工作的代码。 我从一个站点地图页面获取所有锚元素,然后将所有这些元素放入一个列表中。然后,我使用从所有这些元素获取URL。在这里之前,代码运行良好。 然而,之后我将这些URL作为参数,并将其传递到方法,以使用。代码一直工作到第一个链接,但一旦加载了第一个页面,就会出现stale元素异常。