首页 > 解决方案 > Selenium 等待 HTML 元素更改

问题描述

我正在尝试从网站上抓取预订数据。进入网站后,我必须:

  1. 将默认日期范围(首先,网站显示默认日期范围的预订数据)更改为我要搜索的日期范围
  2. 点击“刷新”按钮
  3. 等待网站更新页面上显示的结果。

使用 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 可见”命令?

标签: pythonhtmlseleniumselenium-webdriver

解决方案


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)

这将等到它变得不可见,然后在您的程序执行任何操作之前变为可见


推荐阅读