欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python Selenium爬取微博并登录163邮箱发送附件

程序员文章站 2022-04-03 09:58:14
使用selenium爬取微博头条标题数据,将数据写入表格中,再登录163邮箱进行发送---------------仅供参考1. 先获取微博头条的数据当打开微博点击头条时页面会自动跳转到一个空白页面,可以使用selenium中的 back() 进行后退import timefrom openpyxl import workbook # 写入Excel表所用from selenium import webdriverclass Wb_tt(): def __init__(self)....

使用selenium爬取微博头条标题数据,将数据写入表格中,再登录163邮箱进行发送---------------仅供参考

selenium的驱动下载地址

1. 先获取微博头条的数据

Python Selenium爬取微博并登录163邮箱发送附件
当打开微博点击头条时页面会自动跳转到一个空白页面,可以使用selenium中的 back() 进行后退

import time
from openpyxl import workbook  # 写入Excel表所用
from selenium import webdriver

class Wb_tt():
    def __init__(self):
        self.wb = webdriver.Chrome()
        self.item = {}
        self.lists = []
    def wb_get(self):
        # 获取微博数据
        self.wb.get('http://weibo.com/login.php')
        time.sleep(3)
        self.wb.find_element_by_xpath("//*[@id='pl_unlogin_home_leftnav']/div/ul/div[2]/li/a").click()
        time.sleep(0.5)
        # 后退
        self.wb.back()
        time.sleep(10)
        # 控制滚轮逐步进行向下滑动
        for y in range(10):
            js = 'window.scrollBy(0,1000)'
            self.wb.execute_script(js)
            time.sleep(0.5)
        time.sleep(1)
        # 获得整个div
        content = self.wb.find_elements_by_xpath('//ul/div[@class="UG_list_b"]')
        # print(content)
        time.sleep(2)
        return content
    def wb_info(self, item):
        # 处理微博数据
        for x in item:
            title = x.find_element_by_xpath('./div[2]/h3/a').text
            source = x.find_element_by_xpath('./div[2]/div/a[2]/span').text
            time = x.find_element_by_xpath('./div[2]/div/span').text
            img = x.find_element_by_xpath('./div[1]/img').get_attribute('src')
            print(title, source, time, img)
            #  存入的数据不能为字符串
            yield [title] + [source] + [time] + [img]
    def wb_save(self, info):
        wb = workbook.Workbook()  # 创建Excel对象
        ws = wb.active  # 获取当前正在操作的表对象
        ws.append(['标题', '来源', '时间', '图片'])
        print(type(info))
        for data in info:
            print('正在写入表格')
            ws.append(data)
        # 保存的名字
        wb.save('wbtt.xlsx')
        print('抓取成功')
        time.sleep(2)
        self.wb.quit()
if __name__ == '__main__':
    result = Wb_tt()
    item = result.wb_get()
    time.sleep(3)
    info = result.wb_info(item)
    time.sleep(3)
    result.wb_save(info)

获取的数据如下:
Python Selenium爬取微博并登录163邮箱发送附件

2. 登录163邮箱发送邮件

Python Selenium爬取微博并登录163邮箱发送附件
想要登录必须要进入iframe

import time
from selenium import webdriver


def Login_163(browser):
    # 登录邮箱
    # browser.save_screenshot("163邮箱.png")
    browser.maximize_window()
    iframe = browser.find_element_by_xpath('//div[@id="loginDiv"]/iframe')
    # 进入iframe
    browser.switch_to.frame(iframe)
    # 输入自己的邮箱账号
    browser.find_element_by_name("email").send_keys('输入自己的账号')
    time.sleep(2)
    # 输入密码
    browser.find_element_by_name("password").send_keys('输入自己的密码')
    time.sleep(2)
    # 点击登录
    browser.find_element_by_id('dologin').click()
    time.sleep(5)


def Wite_email(browser):
    browser.switch_to_default_content()  # 跳出frame,回到主页面
    # 点击写信
    browser.find_element_by_xpath("//*[@id='dvNavTop']/ul/li[2]/span[2]").click()
    # 输入收件人
    browser.find_element_by_class_name('nui-editableAddr-ipt').send_keys('15617295110@163.com')
    # 输入主题
    browser.find_element_by_xpath("//*[@class='nui-ipt-input'and @type = 'text' and @tabindex = '1']").send_keys('selenium爬虫')
    time.sleep(4)
    # 此时要输入要传送的文件路径如:C:\Users\123\Desktop\Selenium爬虫\wbtt.xlsx
    browser.find_element_by_xpath("//input[@type='file' and @class='O0']").send_keys(r"存放自己要发送的路径")
    time.sleep(2)
    # 进入内容
    browser.switch_to.frame(browser.find_element_by_xpath("//iframe[contains(@class,'APP-editor-iframe')]"))
    browser.find_element_by_class_name("nui-scroll").send_keys('123456789')  # 可以输入要发送内容
    browser.switch_to_default_content()
    #点击发送
    browser.find_element_by_xpath("//*[@class='nui-toolbar-item']/div//span[2]").click()


    time.sleep(10)
    browser.quit()

if __name__ == '__main__':
    # 使用谷歌浏览器
    browser = webdriver.Chrome()
    browser.get('https://mail.163.com/')
    Login_163(browser)
    Wite_email(browser)

3. 完整代码

import time
from openpyxl import workbook  # 写入Excel表所用
from selenium import webdriver

class Wb_tt():
    def __init__(self):
        self.wb = webdriver.Chrome()
        self.item = {}
        self.lists = []

    def wb_get(self):
        # 获取微博数据
        self.wb.get('http://weibo.com/login.php')
        time.sleep(3)
        self.wb.find_element_by_xpath("//*[@id='pl_unlogin_home_leftnav']/div/ul/div[2]/li/a").click()
        time.sleep(2)
        # 后退
        self.wb.back()
        time.sleep(10)
        # 控制滚轮逐步进行向下滑动
        for y in range(10):
            js = 'window.scrollBy(0,700)'
            self.wb.execute_script(js)
            time.sleep(0.5)
        time.sleep(1)
        # 获得源码
        content = self.wb.find_elements_by_xpath('//ul/div[@class="UG_list_b"]')
        time.sleep(3)
        return content

    def wb_info(self, item):
        #  使用xpath处理微博数据
        for x in item:
            # 标题  来源  时间  图片
            title = x.find_element_by_xpath('./div[2]/h3/a').text
            source = x.find_element_by_xpath('./div[2]/div/a[2]/span').text
            time = x.find_element_by_xpath('./div[2]/div/span').text
            img = x.find_element_by_xpath('./div[1]/img').get_attribute('src')
            print(title, source, time, img)
            #  存入的数据不能为字符串
            yield [title] + [source] + [time] + [img]

    def wb_save(self, info):
        wb = workbook.Workbook()  # 创建Excel对象
        ws = wb.active  # 获取当前正在操作的表对象
        ws.append(['标题', '来源', '时间', '图片'])

        for data in info:
            print(type(data))
            ws.append(data)
        wb.save('wbtt.xlsx')
        print('抓取成功')

        time.sleep(5)

    def Login_163(self):
        # 登录163邮箱
        # browser.save_screenshot("163邮箱.png")
        self.wb.get('https://mail.163.com/')
        iframe = self.wb.find_element_by_xpath('//div[@id="loginDiv"]/iframe')
        self.wb.switch_to.frame(iframe)
        self.wb.find_element_by_name("email").send_keys('输入账号')  # 163邮箱的账号
        time.sleep(2)
        self.wb.find_element_by_name("password").send_keys('输入密码')  # 163邮箱的密码
        time.sleep(2)
        self.wb.find_element_by_id('dologin').click()
        time.sleep(5)

    def Wite_email(self):
        self.wb.switch_to_default_content()  # 跳出frame,回到主页面
        # 点击写信
        self.wb.find_element_by_xpath("//*[@id='dvNavTop']/ul/li[2]/span[2]").click()
        # 输入收件人
        self.wb.find_element_by_class_name('nui-editableAddr-ipt').send_keys('15617295110@163.com')  # 这里输入收件人的名字
        # 输入主题
        self.wb.find_element_by_xpath("//*[@class='nui-ipt-input'and @type = 'text' and @tabindex = '1']").send_keys(
            'selenium爬虫')
        time.sleep(4)
        # 输入自己要发送文件的路径
        self.wb.find_element_by_xpath("//input[@type='file' and @class='O0']").send_keys(
            r"C:\Users\123\Desktop\Flask_New\Selenium爬虫\wbtt.xlsx")  # 这里存放刚刚保存的xlsx表的路径
        time.sleep(2)
        # 进入内容
        self.wb.switch_to.frame(self.wb.find_element_by_xpath("//iframe[contains(@class,'APP-editor-iframe')]"))
        self.wb.find_element_by_class_name("nui-scroll").send_keys('123456789')
        self.wb.switch_to_default_content()
        # 点击发送
        self.wb.find_element_by_xpath("//*[@class='nui-toolbar-item']/div//span[2]").click()

        time.sleep(10)
        self.wb.quit()


if __name__ == '__main__':
    result = Wb_tt()
    item = result.wb_get()
    info = result.wb_info(item)
    result.wb_save(info)
    result.Login_163()
    result.Wite_email()

Python Selenium爬取微博并登录163邮箱发送附件

本文地址:https://blog.csdn.net/weixin_44369251/article/details/107675754

相关标签: python selenium