尝试使用selenium中的变量制作电子邮件(python 3)

尝试使用selenium中的变量制作电子邮件(python 3),python,python-3.x,selenium,email,selenium-webdriver,Python,Python 3.x,Selenium,Email,Selenium Webdriver,这是我的第一篇博文,我对python非常陌生,更不用说通过python发送电子邮件了。所以我的目标是从一个网站上抓取前5篇文章,然后给自己发一封电子邮件。现在我只需要它,这样当我运行它时,它会从一个电子邮件地址发送到另一个电子邮件地址。一旦我解决了这个问题,我会担心以后的日程安排。这是我的代码,它只是使用selenium对文章进行了删减。 编辑:我刚刚运行了第一段代码,发现它将同一个故事打印了5次。如果有人也能修复它,让它打印5个不同的新闻故事,那就太好了 from selenium impor

这是我的第一篇博文,我对python非常陌生,更不用说通过python发送电子邮件了。所以我的目标是从一个网站上抓取前5篇文章,然后给自己发一封电子邮件。现在我只需要它,这样当我运行它时,它会从一个电子邮件地址发送到另一个电子邮件地址。一旦我解决了这个问题,我会担心以后的日程安排。这是我的代码,它只是使用selenium对文章进行了删减。 编辑:我刚刚运行了第一段代码,发现它将同一个故事打印了5次。如果有人也能修复它,让它打印5个不同的新闻故事,那就太好了

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
from webdriver_manager.chrome import ChromeDriverManager


def getnews():
    driver = webdriver.Chrome(ChromeDriverManager().install())
    driver.get("https://community.elitedangerous.com/en/")
    driver.implicitly_wait(5)
    news = driver.find_element_by_class_name("article")
    divider =("_____________________________________________________________________________________________________")
    for i in range(0,6):
        print(news.text)
        print(divider)
    driver.quit()


getnews()
如果你跑去,你会得到我的书呆子新闻。我在这里找到了一个互联网的电子邮件代码。这适用于基本文本

import smtplib


with smtplib.SMTP('smtp.gmail.com', 587) as smtp:
    smtp.ehlo()
    smtp.starttls()
    smtp.ehlo()
    smtp.login('mysendingemail.gmail.com', 'myverysecurepassword')

    subject = "this is the title"
    body = "this is the body of the email"

    #i dont really get what this means 
    msg = f'Subject: {subject}\n\n{body}'

    smtp.sendmail('mysendingemail.gmailcom', 'myotheremail@gmail.com',msg)
我想我的问题是,我是否能够通过电子邮件向自己发送这些价值观,然后可能以后再发送,这样它就可以每周向我发送电子邮件。我甚至不知道如何开始知道如何做到这一点,但我现在的主要问题是如何通过电子邮件从网站上获取文本。提前谢谢

在对制作列表发表了一些评论之后,我做了以下工作:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
from webdriver_manager.chrome import ChromeDriverManager
import smtplib



def get_news():
    driver = webdriver.Chrome(ChromeDriverManager().install())
    driver.get("https://community.elitedangerous.com/en/")
    driver.implicitly_wait(5)

    v=2

    divider =("_____________________________________________________________________________________________________")
    list = []
    for x in range(0, 5):
        if v <= 7:
            xpath = (str('//*[@id="block-system-main"]/div[' + str(v) + ']'))
            news = driver.find_element_by_xpath(xpath)
            body = news.text
            # print(body)
            # print(divider)
            list.append(news.text)

            v += 1
        else:
            break

    with smtplib.SMTP('smtp.gmail.com', 587) as smtp:
        smtp.ehlo()
        smtp.starttls()
        smtp.ehlo()
        smtp.login('senderemail@email.com', 'password for email')

        subject = "news"
        body = str(list)

        msg = f'Subject: {subject}\n\n{body}'

        smtp.sendmail('sender email.com', 'recieveremail.com', msg)


get_news()
从selenium导入webdriver
从selenium.webdriver.common.keys导入密钥
导入时间
从webdriver_manager.chrome导入ChromeDriverManager
导入smtplib
def get_news():
driver=webdriver.Chrome(ChromeDriverManager().install())
驱动程序。获取(“https://community.elitedangerous.com/en/")
驱动程序。隐式等待(5)
v=2
“两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两两uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
列表=[]
对于范围(0,5)内的x:

如果vsubject
变量是电子邮件的标题,
body
变量是电子邮件中的内容。下面是一个简单的图表:


为什么不将新闻文章中的文本行编译成一个字符串数组(可能每个条目都是一篇文章),并让getnews()函数返回该数组,然后在发送电子邮件的脚本中调用该数组。让我知道这是否有意义


另外,这只是一个提示,但不是必需的,在Python中,函数和变量通常使用snake case,因此getnews()最好写成get_news()。同样,这是一个吹毛求疵的地方,但遵循语言的惯例总是好的。

这应该打印前5个元素

news = driver.find_elements_by_class_name("article")
for new in news[:5]:
    print(new.text)
    print(divider)
我建议把它添加到一个列表中

lst=[]
news = driver.find_elements_by_class_name("article")
for new in news[:5]:
    lst.append(new.text)

因此,您只需将您的列表发送到邮件中即可。

谢谢,我会试试看。谢谢你的挑剔。我很感激任何能让我的代码更容易阅读的方法。谢谢,这很有帮助。我没有意识到或忘记了.append(),这让我的生活轻松了很多。我将我的新代码作为最后一个代码块,但在运行时出错。(UnicodeEncodeError)尝试使用我的top方法查看前5篇文章。您可以使用find_元素。好的,我把它放进了,而不是我的第一个for循环。它工作得很好,但我仍然会遇到同样的错误。因此,现在你必须将列表转换为字符串。我知道我非常不称职,但我只是想知道这是否意味着在电子邮件部分我会说
body=str(lst)
,因为这不起作用。我很抱歉一直打扰你。我甚至不知道如何开始知道如何做到这一点,但我现在的主要问题是如何通过电子邮件从网站获取文本。这相当宽泛/含糊,而且可能离题。请看。