【问题标题】:Selenium TimeOut --> Cannot find the locatorSelenium TimeOut --> 找不到定位器
【发布时间】:2021-11-13 23:26:42
【问题描述】:

我再次发现自己在定位器上苦苦挣扎,或者说正确的方法将其放入正确的语法和代码中。

这是我试图执行的代码:

wait.until(EC.presence_of_element_located((By.XPATH, "//div[@class='col-xs-6']//input[@class='js-order-amount trading-amount trading-price-field textbox pull-left' and(contains(@data-original-title,'Wie viele Stück möchten Sie kaufen?'))]"))).send_keys('33')

这将是来自网站的相应 HTML:

<div class="col-xs-6">

<input class="js-order-amount trading-amount trading-price-field textbox pull-left" type="text" maxlength="9" required="required" placeholder="Menge" value="1" data-toggle="tooltip" data-html="true" data-trigger="manual" data-container="body" data-placement="right" title="" data-original-title="Wie viele Stück möchten Sie kaufen?">

</div>

我得到的错误如下:

TimeoutException                          Traceback (most recent call last)
<ipython-input-24-9c18d6a21146> in <module>
     50 # wait.until(EC.presence_of_element_located((By.XPATH, "//div[@data-original-title,'Wie viele Stück möchten Sie kaufen?'))]"))).click()
     51 
---> 52 wait.until(EC.presence_of_element_located((By.XPATH, "//div[@class='col-xs-6']//input[@class='js-order-amount trading-amount trading-price-field textbox pull-left' and contains('Wie viele Stück möchten Sie kaufen?')]"))).send_keys('33')
     53 
     54 

~\anaconda3\lib\site-packages\selenium\webdriver\support\wait.py in until(self, method, message)
     78             if time.time() > end_time:
     79                 break
---> 80         raise TimeoutException(message, screen, stacktrace)
     81 
     82     def until_not(self, method, message=''):

TimeoutException: Message: 

我想,尤其是那部分

@data-original-title,'Wie viele Stück möchten Sie kaufen?'

与此文本/输入字段一致。但是我怎样才能将其用作有效的定位器?

或者可能输入字段在其他 div 中有些“隐藏”?

希望能得到一些提示或帮助,非常感谢,

本杰明

【问题讨论】:

  • 我猜这个元素还在我们昨天讨论的网站/页面上?如果是这样 - 这个元素在哪里?

标签: python html selenium selenium-webdriver input


【解决方案1】:

您可以使用@data-original-title,'Wie viele Stück möchten Sie kaufen?' 获得以下xpath

//input[@data-container='body'][@data-original-title='Wie viele Stück möchten Sie kaufen?']

PS:如果我们在HTML DOM 中有唯一条目,请检查dev tools(谷歌浏览器)。

检查步骤:

Press F12 in Chrome -> 转到element 部分 -> 做一个CTRL + F -> 然后粘贴xpath 看看,如果你想要的element 用@ 得到高亮 987654330@匹配节点。

更新 1:

根据OP报告的新错误,可以通过以下方式解决

  1. 使用动作链:

    time.sleep(5)
    button = driver.find_element_by_xpath("//input[@data-container='body'][@data-original-title='Wie viele Stück möchten Sie kaufen?']")
    ActionChains(driver).move_to_element(button).send_keys('33').perform()
    
  2. 使用 JS:

    time.sleep(5)
    button = driver.find_element_by_xpath("//input[@data-container='body'][@data-original-title='Wie viele Stück möchten Sie kaufen?']")
    driver.execute_script("arguments[0].scrollIntoView(true);", button)
    button.send_keys('33')
    

进口:

from selenium.webdriver.common.action_chains import ActionChains

【讨论】:

  • 好吧,这似乎工作,定位器是独一无二的,硒找到它。但是现在我收到错误消息:ElementNotInteractableException
  • @BenjaminDiLorenzo :见上面更新的代码。此外,我们不鼓励在评论部分提出多个后续问题,请始终为新错误/问题创建新票。
  • 好的,谢谢你的建议。我还搜索了可能适用于该案例的“move_to_element”执行。不幸的是,我现在收到错误:ElementNotInteractableException:消息:元素不可交互:[object HTMLInputElement] 没有大小和位置(会话信息:chrome=93.0.4577.82)-> 我想这意味着我必须定义一个位置和大小?
  • 您这里报的上述错误,基本上是元素无法正常渲染,请延迟访问元素
  • 你好 Cruisepandey,我通过聊天将登录信息发送给你
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多