python-3.x - 如何获取刷新 div 的数据(Selenium)
问题描述
我正在尝试废弃一个内容(div)每 2 秒刷新一次的网站。
除了我不断获得之外,我当前的代码工作正常StaleElementReferenceException
因为元素不断刷新所有内容 2 秒。
以下是我到目前为止所拥有的
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome.options import Options
import time, sys
option = webdriver.ChromeOptions()
browser = webdriver.Chrome(executable_path='chromedriver', chrome_options=option)
browser.get("example.com")
sports_categories = browser.find_elements_by_css_selector('div.sidebar-wrapper')
for sport in sports_categories:
if sport.text == 'FOOTBALL':
sport.click()
time.sleep(2)
sub_menus_html = browser.find_element_by_css_selector('div.category.lvl1.open div.dropdown')
print(sub_menus_html)
我的问题是,
- 我该如何处理这种情况,以便即使 div 在后台刷新,我也能获得准确的目标内容
任何帮助或建议将不胜感激。
解决方案
由于您click()
正在刷新元素,因此您必须收集DOM中的当前元素,因为您在开始循环之前收集的元素列表已变为STALE。
下面是一个示例,说明如何循环并不断更新正在循环的元素的列表对象:
option = webdriver.ChromeOptions()
browser = webdriver.Chrome(executable_path='chromedriver', chrome_options=option)
browser.get("example.com")
sports_categories = browser.find_elements_by_css_selector('div.sidebar-wrapper')
# add counter to keep track
counter = 0
for sport in sports_categories:
#add category refresh here
current_categories= browser.find_elements_by_css_selector('div.sidebar-wrapper')
if current_categories[counter].text == 'FOOTBALL':
current_categories[counter].click()
# I would recommend using something other than sleep to wait for load
# like webdriverwait conditions combined with Expected Conditions
time.sleep(2)
sub_menus_html = browser.find_element_by_css_selector('div.category.lvl1.open div.dropdown')
print(sub_menus_html)
counter += 1
由于我无法访问您正在处理的网站,因此我不确定这个确切的代码块是否可以按原样工作。
如果项目的长度div.sidebar-wrapper
发生变化,或者侧边栏中的项目顺序发生变化,您可能会遇到问题。
但是,刷新您正在循环的元素列表背后的逻辑仍然适用。
推荐阅读
- java - Java中按字符排序字符串列表
- c++ - 是否可以比较实现为 for(int a : vec) 的向量循环中的两个元素
- docker - com.orientechnologies.orient.core.exception.OStorageException:存储元数据中不存在名为 internal.pcl 的文件
- python-3.x - 使用 python3 的 NMAP nse 脚本
- git - 致命:无法从远程存储库中读取。Github 错误:未能将一些 refs 推送到
- python-3.x - 无法在 kali linux 上安装 python3-pip
- java - handler.postDelayed 无法正常工作
- javascript - 使用 socket.io 事件更新状态
- python - 如何从 xpath 中抓取企业名称并在 csv 中获取文件
- amazon-web-services - 将文件从 AWS CodeBuild 传输到 AWS 之外的远程 linux 服务器