gpt4 book ai didi

python - for循环中的 Selenium 过时元素引用

转载 作者:行者123 更新时间:2023-12-04 07:57:29 30 4
gpt4 key购买 nike

我用的是 Windows10,Chrome 版本 89.0.4389.9,vscode,python
此代码仅循环一次,然后出现以下错误。

table = driver.find_element_by_xpath('//*[@id="frm"]/table')
tbody = table.find_element_by_tag_name("tbody")
rows = tbody.find_elements_by_tag_name("tr")
# btns = driver.find_element_by_xpath('//*[@id="frm"]/table/tbody/tr[*]/td[2]/a')

for index, value in enumerate(rows):
body=value.find_elements_by_tag_name("td")[1]

body.click()
sleep(2)

driver.back()
sleep(2)
Traceback (most recent call last):
File "d:/Study/Companylist/program/pandastest.py", line 80, in <module>
body=value.find_elements_by_tag_name("td")[1]
File "D:\Anaconda\lib\site-packages\selenium\webdriver\remote\webelement.py", line 320, in find_elements_by_tag_name
return self.find_elements(by=By.TAG_NAME, value=name)
File "D:\Anaconda\lib\site-packages\selenium\webdriver\remote\webelement.py", line 684, in find_elements
return self._execute(Command.FIND_CHILD_ELEMENTS,
File "D:\Anaconda\lib\site-packages\selenium\webdriver\remote\webelement.py", line 633, in _execute
return self._parent.execute(command, params)
File "D:\Anaconda\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "D:\Anaconda\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document

最佳答案

似乎我找到了解决方案,但可以保护它是最好的,会更深入地研究它:

elements = driver.find_elements(By.CSS_SELECTOR, 'div.g')
for n, el in enumerate(elements):
elements = driver.find_elements(By.CSS_SELECTOR, 'div.g')
elements[n].click()
time.sleep(1)
driver.back()
time.sleep(1)
driver.quit()
尝试查找元素,然后移动开始循环并找到相同的结果并通过枚举函数中的项目编号从该循环中获取项目。
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains

def company_info(driver):
com_name = driver.find_element_by_xpath('Enter your site xpath')
print(com_name.text)

com_addr = driver.find_element_by_xpath('Enter your site xpath')
print(com_addr.text)

com_tel = driver.find_element_by_xpath('Enter your site xpath')
print(com_tel.text)

com_fax = driver.find_element_by_xpath('Enter your site xpath')
print(com_fax.text)

driver = webdriver.Chrome()
url_search = 'Enter your site URL'

#input values
web_open_wait = 5
web_close_wait = 3
driver.get(url_search)
sleep(web_open_wait)

check_names = driver.find_elements_by_xpath('//*[@id="frm"]/table/tbody/tr[1]/td/a'
for n, el in enumarate(check_names, start=1):
check_names = driver.find_elements_by_xpath('//*[@id="frm"]/table/tbody/tr[%d]/td/a' % n)
check_name[el].click()

company_info(driver)
driver.back()

driver.quit()

关于python - for循环中的 Selenium 过时元素引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66626275/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com