excel自动抓取网页数据(Python版本:3.4编辑器:Pycharmexcel文件:导入的excel模板)

优采云 发布时间: 2021-11-08 00:22

  excel自动抓取网页数据(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");

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线