【问题标题】:Can't find element on webpage with Selenium使用 Selenium 在网页上找不到元素
【发布时间】:2021-01-18 09:03:31
【问题描述】:

我正在尝试构建一个机器人,它会在我运行时为我预订课程。

但我对如何继续感到困惑。

我正在使用 Python 和 Selenium 以及 Chromedriver 来加载页面。

下一步是单击登录按钮,添加我的数据,登录然后导航页面以找到正确的类。

我对此很陌生,所以可能很明显,但我无法弄清楚。

我正在运行这段代码:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

d = webdriver.Chrome()

d.get("http://www.360functionalfitness.se/boka-pass/")

elem = d.find_element_by_name("showLogin")

以下错误:

python3.9/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[name="showLogin"]"}
  (Session info: chrome=87.0.4280.141)

我已经阅读了一堆,但仍然无法弄清楚如何识别 dang 按钮。

这是我认为我应该查看以找到相关信息的块:

<li ng-if="!member" class="ng-scope">
            <a href="" ng-click="showLogin()" toggle-off-canvas=""><i class="fa fa-sign-in"><span class="icon-bg bg-darkgreen"></span></i><span class="ng-binding">Logga in</span></a>
        </li>
   

任何指针都会非常有帮助。

【问题讨论】:

    标签: python selenium-webdriver xpath css-selectors webdriverwait


    【解决方案1】:

    文本为 Logga in 的元素在 &lt;iframe&gt; 内,因此您必须:

    • 诱导WebDriverWait 使所需的帧可用并切换到它

    • 诱导WebDriverWait 使所需的元素可点击

    • 您可以使用以下任一Locator Strategies

      • 使用CSS_SELECTOR

        driver.get("http://www.360functionalfitness.se/boka-pass/")
        WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe[src^='https://crossfitmalmo.gymsystem.se/member#/schedule']")))
        WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a[ng-click^='showLogin'] span.ng-binding"))).click()
        
      • 使用XPATH:

        driver.get("http://www.360functionalfitness.se/boka-pass/")
        WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[starts-with(@src, 'https://crossfitmalmo.gymsystem.se/member#/schedule')]")))
        WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[starts-with(@ng-click, 'showLogin')]//span[@class='ng-binding']"))).click()
        
    • 注意:您必须添加以下导入:

       from selenium.webdriver.support.ui import WebDriverWait
       from selenium.webdriver.common.by import By
       from selenium.webdriver.support import expected_conditions as EC
      
    • 浏览器快照:


    参考

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

    【讨论】:

      猜你喜欢
      • 2019-04-16
      • 1970-01-01
      • 2020-03-24
      • 1970-01-01
      • 2021-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多