selenium 找不到按钮
selenium cannot locate button
我尝试自动点击给定的 downloadButton
id 但它在这个演示网站上不起作用 https://www.globalsqa.com/demo-site/progress-bar.
Chromedriver 打开,然后网站上什么也没有发生,我想它有时会因为超时而关闭?
回溯:
Traceback (most recent call last):
File "c:\Users\x\Dropbox\PC\Documents\Python Project\selenium tutorial\tutorial1.py", line 22, in <module>
my_element = driver.find_element(By.ID, "downloadButton")
File "C:\Python310\lib\site-packages\selenium\webdriver\support\wait.py", line 89, in until
raise TimeoutException(message, screen, stacktrace)
假设按钮不存在但它不起作用,我做了一些隐式等待。
import os
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
ser = Service("C:/Program Files (x86)/chromedriver.exe")
options = webdriver.ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-logging'])
driver = webdriver.Chrome(service=ser, options=options)
driver.get("https://www.globalsqa.com/demo-site/progress-bar/")
# Wait for checkbox to be located
button_wait = EC.presence_of_element_located((By.ID, 'downloadButton'))
WebDriverWait(driver, 10).until(button_wait)
driver.implicitly_wait(30)
# my_element = driver.find_element_by_id('downloadButton')
my_element = driver.find_element(By.ID, "downloadButton")
my_element.click()
chrome-版本98.0.4758.81
您尝试访问的元素在 iframe 中。
因此,您首先必须切换到该 iframe 才能访问其中的元素。
像下面这样:
import os
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
ser = Service("C:/Program Files (x86)/chromedriver.exe")
options = webdriver.ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-logging'])
driver = webdriver.Chrome(service=ser, options=options)
wait = WebDriverWait(driver, 20)
driver.get("https://www.globalsqa.com/demo-site/progress-bar/")
wait.until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe.demo-frame.lazyloaded")))
wait.until(EC.visibility_of_element_located((By.ID, "downloadButton"))).click()
在 iframe 中完成工作后,您必须使用
切换回默认内容
driver.switch_to.default_content()
我尝试自动点击给定的 downloadButton
id 但它在这个演示网站上不起作用 https://www.globalsqa.com/demo-site/progress-bar.
Chromedriver 打开,然后网站上什么也没有发生,我想它有时会因为超时而关闭?
回溯:
Traceback (most recent call last):
File "c:\Users\x\Dropbox\PC\Documents\Python Project\selenium tutorial\tutorial1.py", line 22, in <module>
my_element = driver.find_element(By.ID, "downloadButton")
File "C:\Python310\lib\site-packages\selenium\webdriver\support\wait.py", line 89, in until
raise TimeoutException(message, screen, stacktrace)
假设按钮不存在但它不起作用,我做了一些隐式等待。
import os
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
ser = Service("C:/Program Files (x86)/chromedriver.exe")
options = webdriver.ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-logging'])
driver = webdriver.Chrome(service=ser, options=options)
driver.get("https://www.globalsqa.com/demo-site/progress-bar/")
# Wait for checkbox to be located
button_wait = EC.presence_of_element_located((By.ID, 'downloadButton'))
WebDriverWait(driver, 10).until(button_wait)
driver.implicitly_wait(30)
# my_element = driver.find_element_by_id('downloadButton')
my_element = driver.find_element(By.ID, "downloadButton")
my_element.click()
chrome-版本98.0.4758.81
您尝试访问的元素在 iframe 中。
因此,您首先必须切换到该 iframe 才能访问其中的元素。
像下面这样:
import os
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
ser = Service("C:/Program Files (x86)/chromedriver.exe")
options = webdriver.ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-logging'])
driver = webdriver.Chrome(service=ser, options=options)
wait = WebDriverWait(driver, 20)
driver.get("https://www.globalsqa.com/demo-site/progress-bar/")
wait.until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe.demo-frame.lazyloaded")))
wait.until(EC.visibility_of_element_located((By.ID, "downloadButton"))).click()
在 iframe 中完成工作后,您必须使用
切换回默认内容driver.switch_to.default_content()