我正试图从一个网站刮预订数据。进入网站后,我必须:
- 将默认日期范围(首先,网站显示默认日期范围的预订数据)更改为我想要搜索的日期范围
- 点击"刷新"按钮
- 等待网站更新页面显示结果。
使用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;">
…当页面上的预订数据更新时。
是否有一个Selenium命令可以在移动到Python代码的下一行之前检测到此更改?例如,在点击"刷新"按钮后,"等待"直到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)
这将等待直到它不可见,然后在程序执行任何操作之前变为可见