class Hotmail:
def __init__(self, username, password):
self.browser = webdriver.Chrome()
self.username = username
self.password = password
self.emailsender = []
self.emailcontent = []
def signIn(self):
self.browser.get("url")
time.sleep(2)
self.browser.maximize_window()
username = self.browser.find_element_by_name("xxx").send_keys(self.username)
self.browser.find_element_by_xpath("xpath").click()
time.sleep(3)
password = self.browser.find_element_by_name("name").send_keys(self.password)
self.browser.find_element_by_xpath("xpath").click()
time.sleep(3)
self.browser.find_element_by_name("name").click()
self.browser.find_element_by_id("id").click()
def getEmails(self):
self.browser.get("anotherurl")
time.sleep(2)
sender = self.browser.find_elements_by_css_selector(".somecode")
content = self.browser.find_elements_by_css_selector(".someother code")
for i in sender:
self.emailsender.append(i.text)
for a in content:
self.emailcontent.append(a.text)
hotmail = Hotmail(username, password)
hotmail.signIn()
hotmail.getEmails()
print(hotmail.emailsender)
print(hotmail.emailcontent)
# it is all ok until here, problem is below
for a,b in zip(hotmail.emailsender, hotmail.emailcontent):
# print(a,b) this way you can see all the results
with open("output.txt", "w") as output:
output.write(f"{a}-----------------{b}")
# I get only first email as result, I want all of them
正如你在上面看到的,我有一个代码提取我的电子邮件发件人姓名和主题,然后将它们保存到"output.txt"在与"sender--------subject"相同的路径上但我只收到第一封电子邮件,其余的不能插入,有人知道怎么做吗??
编辑:如果你想把它附加到docx文件:
import docx
document = Document()
for a,b in zip(hotmail.emailsender, hotmail.emailcontent):
document.add_paragraph(f"{a}---------------{b} n")
document.save("yourdocfile.docx")
您不断地一遍又一遍地覆盖同一个文件。所有内容都可能被写入,但只会保留最后写入的内容。
您需要以追加模式打开文件(注意"a"
):
for a,b in zip(hotmail.emailsender, hotmail.emailcontent):
with open("output.txt", "a") as output:
output.write(f"{a}-----------------{b}")
或者在整个循环中保持同一文件打开:
with open("output.txt", "w") as output:
for a,b in zip(hotmail.emailsender, hotmail.emailcontent):
output.write(f"{a}-----------------{b}")
注意,对于第一种方法,如果您多次运行此代码,它将保留所有运行的所有结果。第二种方法将在每次程序运行时重置文件。