使用 Selenium Python 3 查找按钮元素

Find button element with Selenium Python 3

我对 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"}
            

您应该添加一个 wait 让元素在访问它们之前加载。
也可以使用 button 标签名称和 send-button class 名称来唯一定位提交按钮 manufacturer,而其他 class 名称不是唯一的,可能会动态更改。

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()

直接点击 implicitExplicit 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)