【问题标题】:Python XPath selector not working with seleniumPython XPath 选择器不适用于 selenium
【发布时间】:2021-04-14 01:28:29
【问题描述】:

我试图自动化一些输入。为此,我需要在
标签之后输入一些文本。 为了确定输入的位置,我尝试使用 XPath 来查找 HTML 代码。

<span data-offset-key="1dq3m-0-0">
  <br data-text="true">
</span>

这是我用python写的。

buf_comp_text = 'foobar'
el_xp_comp_text = '//*[@data-text]'

...

## create post in queue (comment)
print('create post in queue - text')
post_txt = driver.find_element_by_xpath(el_xp_comp_text).send_keys(buf_comp_text)


不幸的是,我总是收到错误消息:

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@data-text]"}

感谢任何提示。

【问题讨论】:

  • 能分享一下元素的HTML吗?

标签: python selenium xpath css-selectors webdriverwait


【解决方案1】:

您需要定位&lt;span&gt; 标记,而不是定位&lt;br&gt; 标记,您可以使用以下Locator Strategy

  • 使用css_selector

    buf_comp_text = 'foobar'
    driver.find_element_by_css_selector("span[data-offset-key]").send_keys(buf_comp_text)
    
  • 使用xpath

    buf_comp_text = 'foobar'
    driver.find_element_by_xpath("//span[@data-offset-key][.//br[@data-text]]").send_keys(buf_comp_text)
    

理想情况下,要将字符序列发送到您需要为element_to_be_clickable()诱导WebDriverWait的元素,您可以使用以下Locator Strategy之一:

  • 使用CSS_SELECTOR:

    buf_comp_text = 'foobar'
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "span[data-offset-key]"))).send_keys(buf_comp_text)
    
  • 使用XPATH

    buf_comp_text = 'foobar'
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//span[@data-offset-key][.//br[@data-text]]"))).send_keys(buf_comp_text)
    
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    

参考

您可以在以下位置找到一些相关讨论:

【讨论】:

  • 不幸的是,我仍然遇到同样的错误。 selenium.common.exceptions.NoSuchElementException:消息:没有这样的元素:无法找到元素:{“method”:“xpath”,“selector”:“//span[@data-offset-key][.//br[ @data-text]]"}
  • @MarkusF 你用 CssSelector / WebDriverWait 试过了吗?
  • CSS 版本也会产生错误。 selenium.common.exceptions.NoSuchElementException:消息:没有这样的元素:无法找到元素:{“method”:“css selector”,“selector”:“span [data-offset-key]”}
  • @MarkusF 如何实现 WebDriverWait
  • 找到了解决方案。一个简单的等待就解决了。谢谢@DebanjanB 的指示
猜你喜欢
  • 1970-01-01
  • 2014-09-01
  • 2013-12-19
  • 2020-05-22
  • 2016-06-15
  • 2015-02-11
  • 2017-08-13
  • 1970-01-01
  • 2014-02-02
相关资源
最近更新 更多