python - Selenium:通过存在_of_element_located() 聚合Selenium
问题描述
我正在用 Python 尝试 Selenium。有没有办法进一步简化代码?
CLASS_NAME = "CLASS_NAME"
CSS_SELECTOR = "CSS_SELECTOR"
ID = "ID"
def check_element_type(element_type, element_string):
if element_type == CLASS_NAME:
return WebDriverWait(browser, timeout).until(EC.presence_of_element_located((By.CLASS_NAME, element_string)))
elif element_type == CSS_SELECTOR:
return WebDriverWait(browser, timeout).until(EC.presence_of_element_located((By.CSS_SELECTOR, element_string)))
elif element_type == ID:
return WebDriverWait(browser, timeout).until(EC.presence_of_element_located((By.ID, element_string)))
这是概念目标,但它不起作用
def get_element(element_type, element_string):
return WebDriverWait(browser, timeout).until(EC.presence_of_element_located((By.element_type, element_string)))
selenium.webdriver.common.by
如果我在具有相同名称的常量字符串时显式导入,则会引发错误CLASS_NAME = "CLASS_NAME"
,CSS_SELECTOR = "CSS_SELECTOR"
解决方案
返回By
字符串
class By(object):
"""
Set of supported locator strategies.
"""
ID = "id"
XPATH = "xpath"
LINK_TEXT = "link text"
PARTIAL_LINK_TEXT = "partial link text"
NAME = "name"
TAG_NAME = "tag name"
CLASS_NAME = "class name"
CSS_SELECTOR = "css selector"
在您的方法中更改By.element_type
为element_type
def get_element(element_type, element_string):
return WebDriverWait(browser, timeout).until(EC.presence_of_element_located((element_type, element_string)))
并像使用它一样
element = get_element("css selector", "div.myClass")
element = get_element("class name", "myClass")
element = get_element("xpath", "//div[@='myClass']")
或者
CLASS_NAME = "class name"
CSS_SELECTOR = "css selector"
element = get_element(CSS_SELECTOR, "div.myClass")
element = get_element(CLASS_NAME, "myClass")
推荐阅读
- javascript - 使用 Vue.js 在 WebStorm 中进行调试
- c# - 使用 EPPlus 将背景图像添加到 Excel 不起作用
- python - webscrape 脚本输出数据 3 次。我做错了什么?
- docusignapi - 条件父标签签名选项卡
- angular - 如何从服务器端以角度呈现文件(图像)
- html - 可以在静态网站上使用 nodejs 进行表单提交吗?
- javascript - 使用 jQuery 删除没有特定类的 DOM 元素
- python - 动态更新最后一列标题 - 熊猫
- javascript - PeerJS 在 Chrome 中连接,但在其他浏览器中不连接
- http-status-code-403 - 浏览器中的http状态码为200,但http状态检查器中的http状态码为403,为什么?