【问题标题】:python selenium locating elements issuepython selenium定位元素问题
【发布时间】:2020-09-10 12:34:00
【问题描述】:

我正在用 selenium 制作一个机器人,但我不能点击这里:

有很多类,我找不到我应该使用哪一个,因为我尝试了一些但没有做。

例如,按钮名称是OTURUM AÇ,我是这样写的,但它不起作用。

browser = driver.find_elements_by_xpath('//button[text()="OTURUM AÇ"]').click()

来自 cmets 的更新:https://dlive.tv/ 我想在那里登录。但我做不到。

【问题讨论】:

  • 尝试复制并输入其 XPath
  • 改变元素为元素
  • 我复制了 XPath 方式,但仍然无法正常工作:(
  • @whisber 欢迎来到 SO!请阅读minimal reproducible example 并相应地编辑您的帖子。 html 代码的图像是不好的做法,没有人会从图像中为您编写。将其添加为帖子本身而不是图像的一部分。添加外部链接也是一种不好的做法,因为它们会不断变化并过期。
  • 可以分享一下页面网址吗?

标签: python selenium xpath web-scraping webdriverwait


【解决方案1】:
这应该适合你
btn = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//span[text()='OTURUM AÇ']")))
driver.execute_script('arguments[0].click();', btn)

【讨论】:

  • 由于 ElementNotInteractable 异常,我使用了 'execute_script'
【解决方案2】:

它不起作用,因为您试图找到一个按钮,其中包含文本“OTURUM AÇ”。在您添加到问题的 html 中,没有 <button> 标记,因此您需要使用 <span> 搜索此元素。

login = driver.find_element_by_xpath('//span[text()="OTURUM AÇ"]')
driver.execute_script('arguments[0].click();', login)

在 html 中,不强制使用<button> 标签在页面上放置按钮,因此请务必检查标签。

【讨论】:

    【解决方案3】:

    您使用了错误的定位器。有带有span 标签的登录按钮,而不是button。 定位器将是:

    //span[text()="OTURUM AÇ"]
    

    但在定位器中使用文本并不是一个好习惯。您可以使用 css 重写它:

    .sign-register-buttons .btnA span
    

    或相同的 xpath 定位器:

    //*[contains(@class, 'sign-register-buttons')]//*[contains(@class, 'btnA')]//span
    

    它们适用于任何网站语言。

    【讨论】:

      【解决方案4】:

      要单击文本为 OTURUM AÇ 的元素,您可以使用以下基于Locator Strategies

      browser.find_element_by_xpath("//div[@class='sign-register-buttons flex-align-center']//span[text()='OTURUM AÇ']").click()
      

      理想情况下,要单击需要为element_to_be_clickable() 诱导WebDriverWait 的元素,您可以使用以下任一定位器策略

      WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='sign-register-buttons flex-align-center']//span[text()='OTURUM AÇ']"))).click()
      

      注意:您必须添加以下导入:

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

      【讨论】:

        猜你喜欢
        • 2021-04-11
        • 2019-12-18
        • 1970-01-01
        • 2021-03-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-27
        相关资源
        最近更新 更多