python - 尝试使用 Python 和 Selenium 将对象序列化为 JSON 时出现属性错误
问题描述
我收到以下错误:
return json.dumps(obj, default=lambda o: o.__dict__)
AttributeError: 'mappingproxy' object has no attribute '__dict__'
这里是主要的:
from selenium import webdriver
from pages.cmc_home_page import CMCHomePage
from selenium import webdriver
import open_tagged_tickets
def get_driver():
options = webdriver.ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-logging'])
browser = webdriver.Chrome(options=options)
cmc_home_page = CMCHomePage(driver=browser)
return cmc_home_page
def main():
cmc_home_page=get_driver()
cmc_home_page.go()
open_tagged_tickets.open_tagged_tickets(cmc_home_page)
main()
这是 open_tagged_tickets 函数:
from selenium.webdriver.support.select import Select
import json
def open_tagged_tickets(driver):
iframe=driver.iframe()
driver = json.dumps(driver.toJson(), indent=4)
driver.switch_to_iframe(iframe)
这是 CMCHomePage 类:
from selenium.webdriver.common.by import By
from pages.base_element import BaseElement
from pages.base_page import BasePage
from pages.locator import Locator
import json
class CMCHomePage(BasePage):
def iframe(self):
locator = Locator(by=By.CSS_SELECTOR, value="iframe[id='main_body'][name='main_body']")
return BaseElement(driver=self.driver, locator=locator)
def last_elem_to_load(self):
locator = Locator(by=By.CSS_SELECTOR, value="tr[role='row']")
return BaseElement(driver=self.driver, locator=locator)
def toJson(obj):
return json.dumps(obj, default=lambda o: o.__dict__)
def switch_to_iframe(self, frame):
self.driver.switch_to.frame(frame)
它导入以下两个类:
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
class BaseElement(object):
def __init__(self, driver, locator):
self.driver = driver
self.locator = locator
self.web_element = None
self.find()
def find(self):
element = WebDriverWait(self.driver, 30).until(
EC.visibility_of_element_located(locator=self.locator)
)
self.web_element = element
return None
def input_text(self, txt):
self.web_element.send_keys(txt)
return None
def click(self):
element = WebDriverWait(self.driver, 30).until(
EC.element_to_be_clickable(locator=self.locator)
)
element.click()
return None
def attribute(self, attr_name):
attribute = self.web_element.get_attribute(attr_name)
return attribute
@property
def text(self):
text = self.web_element.text
return text
class BasePage(object):
url = None
def __init__(self, driver):
self.driver = driver
def go(self):
self.driver.get(self.url)
而且我不知道为什么我会遇到这个问题。我只想切换到 iframe,以便程序可以继续运行。当我只是使用函数时它运行良好,但后来我决定继续使用面向对象。任何帮助将不胜感激。
解决方案
推荐阅读
- python - 如何使用默认键打印字典
- c - 是否可以在 SRecord 中使用非绝对地址范围并将一些数据粘贴到二进制文件的最后一个字节上?
- installation - 无法删除“/var/lib/dpkg/lock-frontend”权限被拒绝
- javascript - 减少返回空数组
- javascript - 页面上多个视频的显示持续时间
- java - Java 2D - 多缓冲区不可用
- docker - Docker 容器无法连接到互联网
- php - Magento 2:订单确认电子邮件中的自定义产品属性
- javascript - Vue.js 3:当 `data()` 转换为 `setup()` 时,`v-model` 失去响应性
- java - 使用列表映射对象
>