【问题标题】:Alternative to time.sleep() in selenium using python while web scraping?在网络抓取时使用 python 替代 selenium 中的 time.sleep()?
【发布时间】:2021-01-26 16:58:16
【问题描述】:

我需要根据该国不同的地点来计算某些列出的食品的价格。有一个输入文本框,可让我输入城市名称并按“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。

已经坚持了很长一段时间了。任何帮助/指针将不胜感激。

【问题讨论】:

  • 你可以在documentation阅读它。
  • edit 在您的问题中包含minimal reproducible example,这对于硒问题需要足够的python 代码和HTML 代码来回答问题。
  • @GregBurghardt 添加了 HTML 并且弹出窗口是出现的第一件事(询问城市)。当我手动输入“孟买”时,列表会自动填充,我可以通过按“Enter”来选择城市。但是,send_keys("Mumbai") 后跟 send_keys(keys.RETURN) 不起作用。
  • 仍然无法获得有效的解决方案。如果有人可以帮忙吗?

标签: python selenium selenium-webdriver web-scraping staleelementreferenceexception


【解决方案1】:

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那是文章

【讨论】:

  • 谢谢,但不知何故,我也使用这种方法超时。几乎似乎自动化根本不会触发自动填充。我已经编辑了这个问题,以便给你一个更好的主意。
猜你喜欢
  • 2021-08-11
  • 2020-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-06
  • 2019-03-15
  • 1970-01-01
相关资源
最近更新 更多