selenium中的time.sleep()在web抓取时使用python的替代方案?

2024-04-25 14:00:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要根据全国不同地区的情况,对某些列出的食品项目进行削价。有一个输入文本框,允许我输入城市名称&;按“回车”键可显示该城市的可用项目列表

以下是我如何尝试实现自动化:

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>

问题是-发送_键后,网站需要时间自动填充输入框,然后我需要按enter键

我试着在发送键后使用time.sleep(2),但这会导致弹出窗口消失&;执行Keys.RETURN时出现StaleElement异常

我已经在这上面呆了很长时间了。如有任何帮助/建议,将不胜感激


Tags: divboxidinputvaluestyledisplaybutton
1条回答
网友
1楼 · 发布于 2024-04-25 14:00:40

Selenium实际上有一篇关于这方面的文章,包含显式和隐式等待,我认为这是您正在寻找的:

# 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"))

https://selenium-python.readthedocs.io/waits.html这就是文章

相关问题 更多 >