【问题标题】:Selenium unable to locate element despite adding time.sleep()尽管添加了 time.sleep(),但 Selenium 无法定位元素
【发布时间】:2021-07-23 20:33:28
【问题描述】:

我编写了一个脚本来查找并单击一个按钮,直到今天它都运行良好。我想知道是什么原因造成的:

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"button[data-bind="click:selectLocation"]"}

我尝试添加 time.sleep() 只是为了确保我等待页面加载的时间足够长,但是没有,错误仍然出现。这是按钮的html:

<div class="form-group">                    
 <div class="col-xs-12">                       
   <label data-bind="lang:searchSelectLocation">Select a location</label>                        
  <button type="button" class="btn btn-default btn-block text-left" data-bind="click:selectLocation">                            <i class="fa fa-fw fa-map-marker-alt" data-bind="css:loadingLocation ? 'fa-spinner fa-spin' : 'fa-map-marker-alt'"></i>&nbsp;<!--ko text: location ? location.name : $root.lang('searchSelectLocationOptions') -->Cityname<!--/ko--><i class="fa fa-chevron-right pull-right"></i>                        
  </button>                  
 </div>               
</div>

这里是代码 sn-p 找到并点击按钮:

time.sleep(20)
driver.find_element_by_css_selector('button[data-bind="click:selectLocation"]').click()
time.sleep(20)

P.S 在点击之前我已经等待了。很抱歉错过了。

【问题讨论】:

  • 你需要先睡觉再找。 time.sleep() 然后 driver.find()
  • 正如已经建议的那样,在点击之前等待。 200 秒过大超时
  • 我之前也有一个 time.sleep() 。没有帮助。
  • @DanMullin 还有其他建议吗?
  • @Jandeer7 我一直在寻找。我使用 .Net 版本的 Selenium,并成功使用了等待加载功能。那是在python Selenium中吗?我看到它是基于答案的。嗯..

标签: python html python-3.x selenium web-scraping


【解决方案1】:

嗯,首先你应该等待你点击按钮之前,而不是之后,以确保它被加载。

其次,Selenium 带有所谓的Explicit Waits,它允许您等到元素可见或可点击。

所以在你的情况下,这看起来像这样:

max_time_to_wait = 200 # if it doesn't find the element in this timespan, it will throw a TimeoutException
element = WebDriverWait(driver, max_time_to_wait).until(
        EC.element_to_be_clickable((By.CSS_SELECTOR, 'button[data-bind="click:selectLocation"]')))
element.click()

【讨论】:

  • 点击前已经等待,但替换为您的建议,但在 200 超时后仍然出现异常。很奇怪
  • 如果您使用的是 Google Chrome,请按 Ctrl + Shift + I 检查网页,然后按 Crtl + F 后,您可以输入您的 css 选择器。如果选择器正确,则该按钮应以绿色突出显示。
  • 是的,我做到了,按钮在那里并按预期突出显示。这就是为什么它真的很奇怪
  • 好吧,这确实很奇怪。它也可以在 iframe 中。你能把网站的链接发过来吗?
  • 好的,我们可以直接聊天吗?谢谢
猜你喜欢
  • 1970-01-01
  • 2014-12-18
  • 2022-01-06
  • 2021-06-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多