仿佛_一念成佛 发表于 2021-7-28 06:01

用selenium来下载数据并保存到docx里面

本帖最后由 仿佛_一念成佛 于 2021-7-29 05:52 编辑

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

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/div/ul/li/form/p/input').send_keys('')#传输账号和密码
time.sleep(1)
login_password = driver.find_element_by_xpath('/html/body/section/div/section/div/ul/li/form/p/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/section/section/div/ul/li/div/ul/li/ul/li/div/ul/li/ul/li/p').click()#点击temático
time.sleep(2)
file = docx.Document()#创建一个docx对象
click_button_lista_x =driver.find_element_by_xpath('/html/body/div/section/section/div/ul/li/div/ul/li/ul/li/div/ul/li/ul/li/p').click()
for s in range(2,20):
    click_button_lista = driver.find_element_by_xpath('/html/body/div/section/section/div/ul/li/div/ul/li/ul/li/div/ul/li/ul/li/p').click()#点击lista让它再次出现
    obtain_TemaText = driver.find_element_by_xpath('//*[@id="item_asignaturas_curso_lista_test_1"]/ul/li[{}]/ul/li/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/section/section/div/ul/li/div/ul/li/ul/li/div/ul/li[{}]/ul/li/img'.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/ul/li/div/ul/li/ul/li/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 = #找出文件下面所有的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/section/ul/li/div/ul/li/ul/li/ul/li').text#获取a
      file.add_paragraph(obtain_TextA)
      print('A:',obtain_TextA)
      obtain_TextB = driver.find_element_by_xpath('/html/body/div/section/ul/li/div/ul/li/ul/li/ul/li').text#获取b
      file.add_paragraph(obtain_TextB)
      print('B:',obtain_TextB)
      obtain_TextC = driver.find_element_by_xpath('/html/body/div/section/ul/li/div/ul/li/ul/li/ul/li').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)

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还有人用? 巨慢无比

{:1_907:}是不会用吗,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自己都放弃自己了,还有一些盲目追随者。

现在热门的有什么啊
页: [1] 2
查看完整版本: 用selenium来下载数据并保存到docx里面