python - Selenium 等待 HTML 元素更改
问题描述
我正在尝试从网站上抓取预订数据。进入网站后,我必须:
- 将默认日期范围(首先,网站显示默认日期范围的预订数据)更改为我要搜索的日期范围
- 点击“刷新”按钮
- 等待网站更新页面上显示的结果。
使用 Selenium、Python 和 BeautifulSoup,当我执行 Selenium 命令以更新日期范围的字段并单击“刷新”按钮时,当代码到达我使用 BeautifulSoup 提取 HTML 数据的行时,默认预订数据提取默认网站日期范围,而不是我填写的日期范围的预订数据。
经观察,该站点似乎使用 Selenium 移动得太快,无法提取更新的数据,这需要一些时间来加载。我试图解决这个问题,driver.implicitly_wait(5)
但这会返回高度不一致的结果。
我想检测一个允许稳定提取而没有错误的 HTML 元素。我意识到,当我单击“刷新”按钮时,这个特定元素...
<div id="textArea" style="visibility: visible; display: block;">
...更改为...
<div id="textArea" style="visibility: hidden; display: block;">
...并变回...
<div id="textArea" style="visibility: visible; display: block;">
...当页面上的预订数据更新时。
在进入我的 Python 代码的下一行之前,是否有一个 Selenium 命令可以检测到这种变化?例如,单击“刷新”按钮后,“等到 style=visibility 可见”命令?
解决方案
while True:
a = driver.find_element_by_id('textArea').get_attribute('style')
if a == r"visibility: hidden; display: block;"
break
else:
time.sleep(.05)
while True:
a = driver.find_element_by_id('textArea').get_attribute('style')
if a == r"visibility: visible; display: block;"
break
else:
time.sleep(.05)
这将等到它变得不可见,然后在您的程序执行任何操作之前变为可见
推荐阅读
- css - 如何继承/覆盖文本样式
- arrays - 在 java API 端点中接收到对象后,对象内的 JSON 数组失去了它的顺序
- r - 在 R 中创建最佳拟合线
- json - Scala - 遍历 json 中的结构并获取值
- ethereum - 非托管是什么意思?
- javascript - MP3 文件在桌面/iOS SAFARI 中的持续时间无限
- fortran - 传递略有不同的过程作为参数
- react-native - 如何在包括 Webview 的 React 本机页面中导航回退功能
- elasticsearch - Elasticsearch GET / 返回 HTML 错误而不是 JSON 响应
- python-3.x - 根据更改的列条件在数据框中添加行