如何解决在 web 抓取时使用 python 在 selenium 中替代 time.sleep() ?
我需要根据该国的不同地点来抓取某些列出的食品的价格。有一个输入文本框,可让我输入城市名称,然后按“Enter”键会显示该城市可用的物品列表。
driver.get("https://grofers.com/")
ele = driver.find_element_by_xpath("//input[@data-test-id='area-input-Box']")`
ele.send_keys(area)
ele.send_keys(Keys.RETURN)
这是我正在使用的 HTML:
<div style="margin-left: 51px; height: 36px;">
<div style="display: flex; height: 100%;">
<button class="btn location-Box mask-button">Detect my location</button>
<div class="oval-container">
<div class="oval">
<span class="separator-text">
<div class="or">OR</div>
</span>
</div>
</div>
<div style="width: 220px;">
<div class="modal-right__input-wrapper">
<div class="display--table full-width">
<div class="display--table-cell full-width">
<div id="map-canvas"></div>
<div class="Select location-search-input-v1 is-searchable Select--single">
<div class="Select-control">
<div class="Select-multi-value-wrapper" id="react-select-2--value">
<div class="Select-placeholder">Type your city Society/Colony/Area</div>
<div class="Select-input" style="display: inline-block;">**<input data-test-id="area-input-Box" aria-activedescendant="react-select-2--value" aria-expanded="false" aria-haspopup="false" aria-owns="" role="comboBox" value="">**</div>
</div>
<span class="Select-arrow-zone"><span class="Select-arrow"></span></span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
问题是 - 在 send_keys 之后,网站需要时间在我需要按 Enter 之后自动填充输入框。
我尝试在 send_keys 之后使用 time.sleep(2) 但这会导致弹出窗口消失并且在我执行 Keys.RETURN 时出现 StaleElementException。
已经坚持了很长一段时间了。任何帮助/指针将不胜感激。
解决方法
Selenium 实际上有一篇关于 Explicit 和 Implicit 等待的文章,我想这就是你要找的:
# Wait until an element with id='myNewInput' has class 'myCSSClass'
wait = WebDriverWait(driver,10)
element = wait.until(element_has_css_class((By.ID,'myNewInput'),"myCSSClass"))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。