Selenium Python发送邮件:DataFrame列无法渲染为可点击链接
问题原因分析
- 返回对象错误:你在
get_bug_data中生成了带HTML链接的表格,但HTML(table_data.to_html(...))仅创建了IPython环境的HTML展示对象,并未生成可用于邮件的HTML字符串;函数最终返回的是原始DataFrame,其中Bug ID列是包含HTML标签的普通字符串。 - HTML转义问题:当你将DataFrame传入
build_table时,该函数大概率对字符串中的HTML标签进行了转义(比如把<转为<),导致邮件中显示的是纯文本标签,而非可渲染的链接。
解决方案
方案一:直接生成HTML表格字符串发送(推荐)
修改get_bug_data函数,让它返回渲染好的HTML表格字符串,而非DataFrame:
def get_bug_data(): blocker_bugs = [] # 补充你获取JIRA数据的循环逻辑(原代码缺失循环部分) for i in range(len(keys)): daily_bugs = {"Bug ID": keys[i].text, "Summary": summary[i].text, "Components": comp[i].text} blocker_bugs.append(daily_bugs) table_data = pd.DataFrame(blocker_bugs) # 生成带链接的HTML表格,escape=False确保标签不被转义 html_table = table_data.to_html(render_links=True, index=False, escape=False) return html_table # 调用部分修改 sender = 'xxx.com' receiver = 'xxx.com' def send_mail(body): message = MIMEMultipart('related') message['Subject'] = 'Blocker JIRA ' message['From'] = sender message['To'] = receiver msgTXT = MIMEText(body, 'html') message.attach(msgTXT) msg_body = message.as_string() server = smtplib.SMTP('smtp.xxx.com', 587) server.ehlo() server.starttls() server.login('xxx.com', 'xxx') server.sendmail(sender, receiver, msg_body) server.quit() data_html = get_bug_data() send_mail(data_html)
方案二:保留build_table的处理方式
如果必须使用build_table,需要确保它不对HTML标签进行转义:
- 若
build_table是自定义函数:检查其中生成表格的逻辑,移除对字符串的HTML转义操作,确保Bug ID列的<a>标签被原样保留。 - 若
build_table是第三方库函数:查阅其文档,找到关闭HTML转义的参数(类似escape=False)并开启。
额外注意点
- 移除
get_bug_data中无用的global table_data声明,无需全局变量。 - 原代码中
data = get_bug_data()后的单独data行是无效代码,可直接删除。
内容的提问来源于stack exchange,提问作者muvi
相关产品推荐
相关产品推荐

