在标题中动态查找元素,然后单击它们以在python selenium中进行验证
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在标题中动态查找元素,然后单击它们以在python selenium中进行验证相关的知识,希望对你有一定的参考价值。
这是我的代码
from selenium import webdriver
from selenium.webdriver.common.by import By
class Runfftest():
def test(self):
"""
Inistitate the ff browser
launch the browser
:return:
"""
baseUrl = "https://letskodeit.teachable.com/p/practice"
driver = webdriver.Firefox(executable_path="/usr/local/bin/geckodriver")
driver.maximize_window()
driver.get(baseUrl)
driver.implicitly_wait(10)
header_by_xpath = driver.find_element_by_xpath("//*[@id='navbar']")
links_in_header = header_by_xpath.find_elements(By.TAG_NAME,"a")
size_of_links = len(links_in_header)
print(size_of_links)
for linkinheader in links_in_header:
linkinheader.click()
ff = Runfftest()
ff.test()
我能够找到一个元素并点击它,但是当我这样做时,它会抛出一个错误。
答案
第一次点击后你的错误是:
selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document
这意味着点击后你有了全新的html页面,旧页面中的所有元素都是陈旧的(新页面上不存在)。
请注意,links_in_header列表包含元素列表,但不包含链接(URL)本身。所以你可以做这样的事情(而不是点击):
links_in_header = header_by_xpath.find_elements(By.TAG_NAME,"a")
# get urls from tags
links_in_header = [x.get_attribute('href') for x in links_in_header]
for linkinheader in links_in_header:
driver.get(linkinheader)
另一答案
所以我不明白一件事,你通过xpath找到元素,为什么在搜索标题后你试图点击标题?
遵循此代码,它的工作原理; ps你甚至选择了一个错误的xpath:
from selenium import webdriver
from selenium.webdriver.common.by import By
class Runfftest():
def test(self):
"""
Inistitate the ff browser
launch the browser
:return:
"""
baseUrl = "https://letskodeit.teachable.com/p/practice"
driver = webdriver.Firefox(executable_path="/usr/local/bin/geckodriver")
driver.get(baseUrl)
driver.implicitly_wait(10)
header_by_xpath = driver.find_element_by_xpath(".//*[@id='navbar']/div/div/a")
header_by_xpath.click()
ff = Runfftest()
ff.test()
PS:记得在完成后关闭浏览器:
driver.close()
以上是关于在标题中动态查找元素,然后单击它们以在python selenium中进行验证的主要内容,如果未能解决你的问题,请参考以下文章
编写 jQuery 以在单击时更改动态 iframe 的尺寸 [关闭]