我的Selenium脚本中有一个Python字典,其中一个键("data"(在之后会更新,因为它不是固定值,所以我用Selenium:获得它
fields_personal = {
"data": "",
"nome": "João da Silva",
"documento": "CPF",
"numero": "123.456.789-10",
"telefone": "(01)23456-7890",
"email": "teste@email.com"
}
for data, value in fields_personal.items():
element = driver.find_element_by_id(data)
element.send_keys(value)
if data == "data":
for item in element.find_elements_by_tag_name("option"):
option = item.text.strip()
elem = driver.find_element_by_xpath("//*[@id='data']/option[1]").click()
fields_personal["data"] = option
break
print("{}: {}".format(data, value))
没问题,它很好用。但是当我尝试用print("{}: {}".format(data, value))
或简单地用print(data, value)
打印字典时;数据";值为空的密钥,就好像它还没有更新一样:
data:
nome: João da Silva
documento: CPF
numero: 123.456.789-10
telefone: (01)23456-7890
email: teste@email.com
我打印更新后的字典的唯一方法是调用pprint.pprint(fields_personal)
,因为我希望它是逐行结构化的,但这会输出用引号和大括号格式化的结果,这是我不想要的:
{'data': '28/06/2021',
'documento': 'CPF',
'email': 'teste@email.com',
'nome': 'João da Silva',
'numero': '123.456.789-10',
'telefone': '(01)23456-7890'}
那么,我如何在不更新引号和大括号和的情况下逐行打印它呢?
在if
块中,更新fields_personal["data"]
;但是,当您将其打印为data
时,这是在for
循环开始时读取的原始值。
您可以在块内移动打印,在if
中添加一个else
,以避免打印两次相同的值。
for data, value in fields_personal.items():
element = driver.find_element_by_id(data)
element.send_keys(value)
if data == "data":
for item in element.find_elements_by_tag_name("option"):
option = item.text.strip()
elem = driver.find_element_by_xpath("//*[@id='data']/option[1]").click()
fields_personal["data"] = option
break
print("{}: {}".format("data", fields_personal["data"])
else:
print("{}: {}".format(data, value))
然而,如果您可以在for
块之后等待,那会更好。
for data, value in fields_personal.items():
element = driver.find_element_by_id(data)
element.send_keys(value)
if data == "data":
for item in element.find_elements_by_tag_name("option"):
option = item.text.strip()
elem = driver.find_element_by_xpath("//*[@id='data']/option[1]").click()
fields_personal["data"] = option
break
for key, value in fields_personal.items():
print(f"{key}: {value}")