excel自动抓取网页数据(Python版本:3.4编辑器:Pycharmexcel文件:导入的excel模板)
优采云 发布时间: 2021-11-08 00:22excel自动抓取网页数据(Python版本:3.4编辑器:Pycharmexcel文件:导入的excel模板)
一、环境准备
Python 版本:3.4
编辑:Pycharm
excel文件:导入的excel模板
二、python 代码
由于工作需要,需要每天定时将相关的excel文件导入后台数据库。由于导入逻辑比较复杂,决定通过python模拟登录导入网站,点击相关功能实现自动导入。
代码显示如下:
#!/usr/bin/env python
# coding=utf-8
# import time
from selenium import webdriver
import os
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
# import requests
# from selenium.webdriver.common.keys import Keys
# 自动化操作创研系统的线索导入功能
def ui_auto_operation():
# 模拟登陆
# rep = requests.Session()
browser = webdriver.Firefox()
browser.implicitly_wait(10) # 设置隐性等待,等待10S加载出相关控件再执行之后的操作
browser.maximize_window()
browser.get('http://www.*******.com.cn/****/Login.aspx')
# time.sleep(10) # 强制等待一般只用于测试
# browser.refresh()
# 输入用户名
username = browser.find_element_by_xpath('//*[@id="txtUserName"]')
username.clear()
username.send_keys('*******')
print('username input success')
# 输入密码
browser.find_element_by_xpath('//*[@id="txtPassword"]').send_keys('******')
print('password input success')
# # 加载验证码
# yzm = browser.find_element_by_xpath('/html/body/div[2]/div/div[2]/form/dl[3]/dd/input')
# yzm.send_keys(input('输入验证码:'))
# 点击登陆
browser.find_element_by_xpath('//*[@id="btnLogin"]').click()
print('login success')
# cookies = browser.get_cookies()
# for cookie in cookies:
# rep.cookies.set(cookie['name'], cookie['value'])
# 爬取对应网页的数据
browser.current_window_handle
browser.find_element_by_xpath('/html/body/div[2]/div[1]/div[1]/div[8]/div/a/span').click()
# 切换到当前窗口
browser.current_window_handle
# time.sleep(5)
tow_drive = browser.find_element_by_xpath('/html/body/div[2]/div[1]/div[1]/div[8]/ul/li[5]/a')
tow_drive.click()
print('turn success')
browser.current_window_handle
# time.sleep(2)
# 切换到iframe框架里面
browser.switch_to.frame(browser.find_element_by_xpath('//*[@id="mainFrame"]'))
# # 输入框只读属性的修改
# js = 'document.getElementById("Text1").removeAttribute("readonly");'
# browser.execute_script(js)
# # 定位并且输入路径数据
# receiveStart = browser.find_element_by_xpath('//*[@id="Text1"]')
# receiveStart.clear()
# receiveStart.send_keys('C:\\fakepath\\5096.xls')
# # receiveStart.send_keys(Keys.RETURN)
# 点击上传文件按钮
browser.find_element_by_xpath('//*[@id="btn1"]').click()
# 调用写好的exe实现上传,autoup.exe的建立参考下面的网站
# https://www.cnblogs.com/sunjump/p/7268805.html
os.system("C:\\fakepath\\autoup.exe")
# time.sleep(5)
load = browser.find_element_by_xpath('//*[@id="btn_lead"]')
load.click()
try:
# 每隔2s就去扫描弹出框是否存在,总时长是60s,存在就继续执行之后代码
WebDriverWait(browser, 60, 2).until(EC.alert_is_present())
# 处理弹出alert框
alert = browser.switch_to.alert
alert.accept()
finally:
browser.close()
# browser.quit()
if __name__ == '__main__':
# @version : 3.4
# @Author : robot_lei
# @Software: PyCharm Community Edition
ui_auto_operation()
三、备注
这个网站是内部使用的,不用输入验证码就可以登录,所以操作比较简单。遇到的主要问题:
(1),iframe框架的切换,即加载网页中的部分代码存放在iframe中,导致页面代码加载失败,python无法定位相关元素.
(2),上传的输入框不是直接使用input和参数输入的原因,导致上传文件框中无法直接输入要导入的文件路径。需要点击导入按钮,然后选择文件路径,然后单击上传按钮进行上传。
(3),alert弹出框处理,因为在导入大量数据时,时间过长会导致alert弹框不弹出,但是代码开始操作弹框,而此时无法定位元素,需要等待一段时间扫描查看处理弹窗。
(4),使用SciTE Script Editor编辑程序时,需要在file->Encoding中选择编码,一般为utf-8。
对应的代码如下:
;等待5秒上传窗口出现
WinWait("CLASS:#32770","",5)
; 将输入焦点定位在上传输入文本框中,类型为Edit,数字为1,即上面得到的内容
ControlFocus("文件上传", "","Edit1")
; 在文件名中输入要上传的文件的绝对路径
ControlSetText("文件上传", "", "Edit1",'C:\fakepath\5096.xls')
;等待上传时间,单位是毫秒 1秒=1000毫秒,如果文件很大,需要设置更长的点
睡眠(5000)
; 点击“打开”按钮,即上传,完成整个上传过程
ControlClick("文件上传", "","Button1");