【问题标题】:Selenium Firefox Webdriver - need help locating button and with code to click buttonSelenium Firefox Webdriver - 需要帮助定位按钮和点击按钮的代码
【发布时间】:2022-01-16 16:20:53
【问题描述】:

我正在使用 Selenium,需要在 http://www.tradingview.com/screener 上单击一个名为损益表的按钮。谁能帮我找到按钮名称,并让我知道我尝试实现它的代码是否正确。非常感谢任何帮助。谢谢!!

url = 'http://www.tradingview.com/screener'
driver = webdriver.Firefox()
driver.get(url)

button_element = driver.find_element_by_xpath("//input[@name='Income Statement']")
button_element.click()

【问题讨论】:

    标签: selenium selenium-webdriver xpath webdriverwait


    【解决方案1】:

    这里有两个问题:

    1. 您必须在访问该元素之前添加等待/延迟。
      这最好通过预期条件显式等待来完成。
    2. 您使用了错误的定位器。

    这应该会更好:

    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    url = 'http://www.tradingview.com/screener'
    driver = webdriver.Firefox()
    wait = WebDriverWait(driver, 20)
    driver.get(url)
    wait.until(EC.visibility_of_element_located((By.XPATH, "//div[@data-set='income_statement']"))).click()
    

    【讨论】:

      【解决方案2】:

      您的 xpath 未在 HTMLDOM 中找到正确的元素。

      所以不要这样:

      //input[@name='Income Statement']
      

      使用这个:

      //div[@data-set='income_statement']
      

      一个 CSS 像这样:

      div[data-set = 'income_statement']
      

      解释:

      看到这是一个outerHTML

      <div class="tv-screener-toolbar__favorites-item js-favorite-item" data-set="income_statement">
                          Income Statement
                      </div>
      

      我们可以看到它是一个div tag,所以我们使用//div,它还有data-set 属性income_statement,当你编写XPath 时,它能够使用@987654329 找到正确的节点@唯一性。

      另外,最好使用 ExplicitWait:

      wait = WebDriverWait(driver, 30)
      try:
          wait.until(EC.element_to_be_clickable((By.XPATH, "//div[@data-set='income_statement']"))).click()
          print('Clicked on the button')
      except:
          print('Could not click ')
          pass
      

      进口:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-02-04
        • 2020-10-12
        • 2020-11-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-27
        相关资源
        最近更新 更多