使用 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()
直接点击 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)
我对 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()
直接点击 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)