吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2751|回复: 16
收起左侧

[Python 转载] 用selenium来下载数据并保存到docx里面

[复制链接]
仿佛_一念成佛 发表于 2021-7-28 06:01
本帖最后由 仿佛_一念成佛 于 2021-7-29 05:52 编辑

前言:  用了selenium来抓取一个数据, 在这篇代码中我觉得最重要的就是怎么样去写入图片到docx文档中,其他的就不值一提了. 关于网址和一些关于隐私的我去掉了, 代码是不能直接跑起来的,但是用来学习还是很不错的
代码:

[Python] 纯文本查看 复制代码
import glob
import os
import shutil
import time
from os import listdir

import docx
import requests
from PIL import Image
from selenium import webdriver
from selenium.webdriver import ActionChains, ChromeOptions
from selenium.webdriver.common.keys import Keys
from urllib3 import request

#设置你自己的 chormedriver存放路径
#driver_path=r"D:\Program Files\Google\Chrome\Application\ chromedriver.exe"
#这个是创建一个文件夹,如果有就覆盖,后来没用上
""" if '' not in os.listdir('./'):
    os.mkdir('./autoescuela')
else:
    shutil.rmtree('./autoescuela')
    os.mkdir('./autoescuela') """
#创建一个文件夹,all
start_time = time.time()
option = ChromeOptions()
option.add_experimental_option('excludeSwitches', ['enable-automation'])#添加一个头
driver = webdriver.Chrome(options=option)
start_url = ''
driver.get(start_url)
button_click_Murcia = driver.find_element_by_id("").click()#找到标签
time.sleep(1)
button_click_Atalaya = driver.find_element_by_id("87").click()#找到标签
time.sleep(1)
button_clik_Yes = driver.find_element_by_id('boton_confirm_si').click()
time.sleep(2)
login_user = driver.find_element_by_xpath('/html/body/section/div/section[1]/div/ul/li[3]/form/p[1]/input').send_keys('')#传输账号和密码
time.sleep(1)
login_password = driver.find_element_by_xpath('/html/body/section/div/section[1]/div/ul/li[3]/form/p[2]/input').send_keys('')
time.sleep(1)
driver.find_element_by_id('boton_acceso').click()#点击登录
time.sleep(2)
click_Temático = driver.find_element_by_xpath('/html/body/div[5]/section[2]/section/div/ul/li/div/ul/li/ul/li[3]/div[1]/ul/li[2]/ul/li[1]/p').click()#点击temático
time.sleep(2)
file = docx.Document()#创建一个docx对象
click_button_lista_x =  driver.find_element_by_xpath('/html/body/div[5]/section[2]/section/div/ul/li/div/ul/li/ul/li[3]/div[1]/ul/li[2]/ul/li[1]/p').click()
for s in range(2,20):
    click_button_lista = driver.find_element_by_xpath('/html/body/div[5]/section[2]/section/div/ul/li/div/ul/li/ul/li[3]/div[1]/ul/li[2]/ul/li[1]/p').click()#点击lista让它再次出现
    obtain_TemaText = driver.find_element_by_xpath('//*[@id="item_asignaturas_curso_lista_test_1"]/ul/li[{}]/ul/li[1]/span'.format(s)).text#获取tema text,获取18个tema的名字,用来做文件名
    print('\n')
    print(obtain_TemaText)
    file.add_paragraph('\t')
    time.sleep(3)
    click_Button_green = driver.find_element_by_xpath('/html/body/div[5]/section[2]/section/div/ul/li/div/ul/li/ul/li[3]/div[3]/ul/li[{}]/ul/li[2]/img[2]'.format(s)).click()#点击绿色按钮
    time.sleep(10)
    click_RealizarTest = driver.find_element_by_id('boton_realizar_test').click()#点击ralizar test
    time.sleep(10)
#click_Esc = ActionChains(driver).send_keys(Keys.ESCAPE)#点击esc退出全屏,没有用,不知道为啥
    for i in range(1,31):
        #//*[@id="div_celda_1"]
        #//*[@id="div_celda_2"]
        #//*[@id="div_celda_3"]
        #//*[@id="div_celda_4"]
        #//*[@id="div_celda_30"]
        #time.sleep(3)
        click_celda = driver.find_element_by_xpath('//*[@id="div_celda_{}"]'.format(i)).click()#点击数字按钮
        time.sleep(2)
        obtain_HeadText = driver.find_element_by_xpath('/html/body/div/section[2]/ul/li/div[1]/ul/li[2]/ul[1]/li[1]/strong').text#获取标题文字
        file.add_heading(obtain_HeadText,level=2)#创建二级标题
        print(obtain_HeadText)
        #图片在这里开始循环,得要写一个if判断有没有图片
        get_img = driver.find_element_by_xpath('//*[@id="p_foto_pregunta"]/img').get_attribute('src')#获取图片链接
        gets = get_img.split('/'[-1])[-1]#文件里不能有:符号,所以你要做的就是找到资料然后去除到前面的/和:号
        r = requests.get(get_img)
        print(r.status_code)
        with open('./autoescuela/picture/'+ gets,'wb') as f:
            f.write(r.content)#能够写入图片,但是不能
        #先获取文件下面所有的图片然后写入到docx
        picture_path = './1/picture'
        pictures = [fn for fn in listdir(picture_path)if fn.endswith('.jpg')]#找出文件下面所有的jpg图片
        for fn in pictures:
            file.add_picture(picture_path+'/'+fn)
            #删除文件夹下面的图片来插入到docx,保证不重复
            picture_paths = glob.glob(os.path.join(picture_path,'*.jpg'))
            for x in picture_paths:
                os.remove(x)

        #循环到30,添加一个siguiente的按钮,然后循环完了就点击abandonar text
        #print(get_img)#获取图片地址
        obtain_TextA = driver.find_element_by_xpath('/html/body/div[1]/section[2]/ul/li/div[1]/ul/li[2]/ul[1]/li[2]/ul/li[2]').text#获取a
        file.add_paragraph(obtain_TextA)
        print('A:',obtain_TextA)
        obtain_TextB = driver.find_element_by_xpath('/html/body/div[1]/section[2]/ul/li/div[1]/ul/li[2]/ul[1]/li[3]/ul/li[2]').text#获取b
        file.add_paragraph(obtain_TextB)
        print('B:',obtain_TextB)
        obtain_TextC = driver.find_element_by_xpath('/html/body/div[1]/section[2]/ul/li/div[1]/ul/li[2]/ul[1]/li[4]/ul/li[2]').text#获取c
        file.add_paragraph(obtain_TextC)
        print('C:',obtain_TextC)
        time.sleep(2)
    click_abandonar = driver.find_element_by_xpath('//*[@id="boton_salir_test"]').click()#点击退出
    click_abandornarX = driver.find_element_by_xpath('//*[@id="boton_mensaje_aceptar"]').click()#确定退出
    file.save('./autoescuela/1.docx')#保存为docx
driver.quit()#关闭浏览器
finished_time = time.time()
print('一共用时:',finished_time-start_time)

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
52hnhao + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

shadow2020 发表于 2021-7-29 10:51
njbb888 发表于 2021-7-28 09:17
selenium自己都放弃自己了,还有一些盲目追随者。

那么你用什么做自动化呢?盲目不盲目暂且不说,去搜一下,自动化的招聘条件很多都是要会selenium的,就是是盲目哪也是整个行业盲目了
joivyhnman 发表于 2021-7-28 13:59
njbb888 发表于 2021-7-28 09:17
selenium自己都放弃自己了,还有一些盲目追随者。

同问,还有什么更好的可以推荐下吗。 selenium 确实有点慢。
 楼主| 仿佛_一念成佛 发表于 2021-7-28 06:33
多发了一个,求管理员能删除一下,我找不到删除的地方
ROBertzt 发表于 2021-7-28 08:08
学习了,学习了
njbb888 发表于 2021-7-28 08:57
selenium还有人用? 巨慢无比
1281407155 发表于 2021-7-28 09:07
njbb888 发表于 2021-7-28 08:57
selenium还有人用? 巨慢无比

是不会用吗,web测试 大部分都是用这个做自动化的
njbb888 发表于 2021-7-28 09:17
1281407155 发表于 2021-7-28 09:07
是不会用吗,web测试 大部分都是用这个做自动化的

selenium自己都放弃自己了,还有一些盲目追随者。
studentguo 发表于 2021-7-28 09:45
学习。。。。
ciker_li 发表于 2021-7-28 10:12
感谢分享
1281407155 发表于 2021-7-28 10:15
njbb888 发表于 2021-7-28 09:17
selenium自己都放弃自己了,还有一些盲目追随者。

不觉明历
Facing 发表于 2021-7-28 10:34
njbb888 发表于 2021-7-28 09:17
selenium自己都放弃自己了,还有一些盲目追随者。

现在热门的有什么啊
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-28 22:22

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表