python - 是否可以存储硒对象?(Python)
问题描述
我试图在我的自动化程序中捕获错误并将它们作为参数传递给另一个函数。我的目标是存储这些在自动机期间导致错误的 selenium 对象,并在主要功能完成后处理它们。
现在,我将错误详细信息发送到 csv 文件中:
def send_keys_dropdown(self,url,csv_name):
elements = bot.find_elements_by_xpath("//a[@data-tag='globalize']")
for elem in elements:
class_of_element = elem.get_attribute("class")
if class_of_element == 'CsLinkButton':
try:
# Some actions here
except (ElementNotInteractableException, ElementNotVisibleException) as e:
handle_errors(elem, url, e)
pass
如您所见,handle_errors()函数接受 3 个参数,并且:
def handle_errors(self, elem, url, e):
bot = self.bot
with open('errors.csv', mode='w', newline='', encoding="utf-8") as csv_file:
fieldnames = ['URL', 'Element', 'Error']
writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
writer.writeheader()
writer.writerow({ 'URL': url, 'Element': elem, 'Error':e })
with open('errors.csv', 'rt',encoding='utf8') as csvfile:
errors_list = csv.reader(csvfile, delimiter=',', quotechar='"')
errors_list = list(errors_list)
bot.get(url)
time.sleep(3)
此函数将从 csv 获取 url 并转到导致错误的页面,下一个应该是查找导致错误的元素。但是,我不知道如何存储这些硒对象。
我试图直接传递元素(不写 csv),但它仍然无法正常工作。
谢谢你的帮助!
解决方案
我假设您想在主脚本完成后重试/调查错误。在这种情况下,不可能直接保存 WebElement 对象以供将来使用,因为该元素的所有上下文都已丢失。
您可以将定位器保存到 csv,或者按照@pcalkins 的建议,如果您想稍后进行调查,可以保存 HTML 的内容。
另外,我建议您拆分部分阅读错误表格handle_error()
并将其移动到您要重试/调查的地方。
def send_keys_dropdown(self,url,csv_name):
by, locator = By.XPATH, "//a[@data-tag='globalize']"
elements = bot.find_elements_by_xpath("//a[@data-tag='globalize']")
for elem in elements:
class_of_element = elem.get_attribute("class")
if class_of_element == 'CsLinkButton':
try:
# Some actions here
except (ElementNotInteractableException, ElementNotVisibleException) as e:
handle_errors(by, locator, url, e)
pass
def handle_errors(self, by, locator, url, e):
bot = self.bot
with open('errors.csv', mode='w', newline='', encoding="utf-8") as csv_file:
fieldnames = ['URL', 'By', 'Locator', 'Error']
writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
writer.writeheader()
writer.writerow({ 'URL': url, 'By': by, 'Locator': locator, 'Error':e })
def retry_errors(self):
bot = self.bot
with open('errors.csv', 'rt',encoding='utf8') as csvfile:
errors_list = csv.reader(csvfile, delimiter=',', quotechar='"')
errors_list = list(errors_list)
for error in errors_list:
# actions you want to retry
推荐阅读
- android - 如何在 Kotlin 的卡片视图中设置属性
- python - 使用 PIL(LOW) 绘制重叠的轮廓文本
- c# - 无法在 Excel 单元格中输入“空”文本
- xml - 有什么方法可以运行 XSLT 并使用 Apache fop 在线生成 PDF?
- java - 如何激活具有多个条件的 Eclipse UI 处理程序
- office-js - 如何使用 Office-js API 使自定义 Word-Addin 检查拼写错误
- c++ - 函数返回的类的析构函数
- android - 如何从 Facebook 帐户工具包中获取用户输入的号码?
- node.js - 我无法访问此文件名 [{"filename":"54526108_1946746692102415_4003062236024143872_n.jpg"}]
- javascript - 如何将字符串转换为 mongodb ObjectId?