Selenium (Python) 模式匹配
Selenium (Python) pattern matching
目前正在使用 Selenium 编写 Python 程序来填写在线表格。填写并提交表单后,有 3 种可能的重定向。
我正在尝试编写一个函数来确定我被重定向到哪个页面。
我使用 3 个 try-except 块编写了一个函数,但我无法捕获 NoSuchElementException
。
def match():
try:
match = driver.find_element_by_id("hi")
return 'condition 1'
except NoSuchElementException:
pass
try:
match = driver.find_element_by_id("hey")
return 'condition 2'
except NoSuchElementException:
pass
try:
match = driver.find_element_by_id("hello")
return 'condition 3'
except NoSuchElementException:
pass
return 'none'
我收到以下异常
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: [id="hi"]
旁注:有人知道 Python 中更优雅的模式匹配方法吗?
引发异常是因为 selenium 在元素被事件加载到页面之前正在寻找该元素。
一种更优雅的方法是使用 selenium.webdriver.support.ui.WebDriverWait
,它允许您保持执行流程直到满足条件(例如 dom 中存在元素)
进一步阅读:Selenium waits documentation
使用 xpath,您可以在条件内指定多个元素,这样当其中之一存在时,条件就会得到满足。 。
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
def match():
switcher = {
'hi': 'condition 1',
'hey': 'condition 2',
'hello': 'condition 3'
}
try:
# Wait for 10 seconds max until one of the elements is present or give up
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.XPATH, "//div[@id = 'hi' or @id = 'hey' or @id = 'hello'"))
)
return switcher[element.get_attribute('id')]
except TimeoutException:
return None
目前正在使用 Selenium 编写 Python 程序来填写在线表格。填写并提交表单后,有 3 种可能的重定向。
我正在尝试编写一个函数来确定我被重定向到哪个页面。
我使用 3 个 try-except 块编写了一个函数,但我无法捕获 NoSuchElementException
。
def match():
try:
match = driver.find_element_by_id("hi")
return 'condition 1'
except NoSuchElementException:
pass
try:
match = driver.find_element_by_id("hey")
return 'condition 2'
except NoSuchElementException:
pass
try:
match = driver.find_element_by_id("hello")
return 'condition 3'
except NoSuchElementException:
pass
return 'none'
我收到以下异常
raise exception_class(message, screen, stacktrace) selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: [id="hi"]
旁注:有人知道 Python 中更优雅的模式匹配方法吗?
引发异常是因为 selenium 在元素被事件加载到页面之前正在寻找该元素。
一种更优雅的方法是使用 selenium.webdriver.support.ui.WebDriverWait
,它允许您保持执行流程直到满足条件(例如 dom 中存在元素)
进一步阅读:Selenium waits documentation
使用 xpath,您可以在条件内指定多个元素,这样当其中之一存在时,条件就会得到满足。
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
def match():
switcher = {
'hi': 'condition 1',
'hey': 'condition 2',
'hello': 'condition 3'
}
try:
# Wait for 10 seconds max until one of the elements is present or give up
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.XPATH, "//div[@id = 'hi' or @id = 'hey' or @id = 'hello'"))
)
return switcher[element.get_attribute('id')]
except TimeoutException:
return None