【问题标题】:Find button element with Selenium Python 3使用 Selenium Python 3 查找按钮元素
【发布时间】:2021-08-26 07:10:07
【问题描述】:

我对 Selenium 模块非常陌生。我尝试单击此站点https://www.jumbomail.me/he/ 中的“המשך”按钮。这是我的代码:

import time,selenium
from selenium import webdriver

PATH =  r'C:\Program Files (x86)\chrome\chromedriver.exe'
driver = webdriver.Chrome(PATH)
driver.get('https://www.jumbomail.me/he/')
input_fname=driver.find_element_by_id("tokenfield-tokenfield")
input_fname.send_keys('nareom@reg-ujmv.com')
input_fname = driver.find_element_by_class_name("send-button jm-button ng-binding ng- scope")

这是网页中的 HTML 代码:

<button type="submit" ng-click="vm.submit(false)" class="send-button jm-button ng- 
binding ng-scope" ga-click-event="['Send Form', 'Click', 'Next - Submit button']" 
data-uw-styling-context="true">                        המשך                    
</button>

当我运行它时,我得到这个错误:

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable 
to locate element: {"method":"css selector","selector":".send-button jm-button ng- 
binding ng-scope"}
            

【问题讨论】:

    标签: python-3.x selenium selenium-chromedriver


    【解决方案1】:

    直接点击implicit或Explicit wait不起作用,需要JS干预。

    完整代码:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
    PATH =  r'C:\Program Files (x86)\chrome\chromedriver.exe'
    driver = webdriver.Chrome(PATH)
    
    driver.maximize_window()
    driver.get("https://www.jumbomail.me/he/")
    wait = WebDriverWait(driver, 10)
    wait.until(EC.element_to_be_clickable((By.XPATH, "//span[text()='סגירה']"))).click()
    button = driver.find_element_by_css_selector("button[ng-click='vm.submit(false)']")
    driver.execute_script("arguments[0].click();", button)
    

    【讨论】:

      【解决方案2】:

      您应该添加一个wait 以让元素在访问之前加载。
      此外,提交按钮 המשך 可以通过 button 标签名和 send-button 类名唯一定位,而其他类名不是唯一的,可能会动态变化。

      import time,selenium
      from selenium import webdriver
      from selenium.webdriver.common.by import By
      from selenium.webdriver.support.ui import WebDriverWait
      from selenium.webdriver.support import expected_conditions as EC
      
      PATH =  r'C:\Program Files (x86)\chrome\chromedriver.exe'
      driver = webdriver.Chrome(PATH)
      wait = WebDriverWait(driver, 20)
      
      driver.get('https://www.jumbomail.me/he/')
      wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "#tokenfield-tokenfield"))).send_keys('nareom@reg-ujmv.com')
      wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "button.send-button"))).send_keys('nareom@reg-ujmv.com').click()
      
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-11-30
        • 2022-01-19
        • 2023-01-22
        • 2018-10-12
        • 1970-01-01
        • 1970-01-01
        • 2021-08-12
        • 2016-06-08
        相关资源
        最近更新 更多