尝试通过Selenium python自动化任务,我遇到的问题是for每个部分仅在第一次才起作用,在那之后看不到第二个变量。还尝试增加延迟,以便网页可以完全加载,但存在相同的问题。
我测试了我在互联网上发现的不同情况,所以也进行了手动测试,但是看起来第二个div也无法识别,其余div
for server in browser.find_elements_by_xpath("//*[starts-with(@id,'server-list-')]"):
#try:
print("Server Section----")
time.sleep(5)
#Print server name
print(server.text)
#clicn on button inside the server
server.click()
#back into the server listing
browser.back()
基本上,自动化需要输入每个服务器(以id server-list-开头的div),然后在该部分上单击另一个按钮,然后返回主页。
答案 0 :(得分:0)
由于以下原因,引发了陈旧元素引用异常
请检查您的元素在用户界面上是否仍具有与您交互时使用的相同XPath元素
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get("http://somedomain/url_that_delays_loading")
try:
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.XPATH, "//*[starts-with(@id,'server-list-')]"))
)
for i in range(len(element)):
element[i].click()
driver.back()
element = wait.until(EC.presence_of_element_located((By.XPATH, "//*[starts-with(@id,'server-list-')]")))
finally:
driver.quit()
答案 1 :(得分:0)
在提供有限信息的情况下,您可以尝试以下代码:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
browser = webdriver.Chrome()
wait = WebDriverWait(browser, 10)
servers = wait.until(EC.visibility_of_all_elements_located((By.XPATH, "//*[starts-with(@id,'server-list-')]")))
servers_count = len(servers)
for i in range(servers_count):
print(servers[i].text)
servers[i].click()
browser.back()
servers = wait.until(EC.visibility_of_all_elements_located((By.XPATH, "//*[starts-with(@id,'server-list-')]")))
答案 2 :(得分:0)
您捕获了在深入到特定列表项后不再存在的服务器列表。因此,当您返回列表时,旧的项目已不存在,因此所有项目(包括您希望移至旁边的项目)都已过时。
您需要重新设计逻辑,以便每次从服务器详细信息中获取时都获得服务器列表,并存储一些标记,该标记将使您的脚本知道您已经访问了哪些项目。