一、selenium是啥

  • 框架底层使用JavaScript模拟真实用户对浏览器进行操作。测试脚本执行时,浏览器自动按照脚本代码做出点击,输入,打开,验证等操作,就像真实用户所做的一样,从终端用户的角度测试应用程序。
  • 使浏览器兼容性测试自动化成为可能,尽管在不同的浏览器上依然有细微的差别。
  • 使用简单,可使用Java,Python等多种语言编写用例脚本。

二、selenium的安装

1、在python中安装selenium 命令:pip install selenium

安装成功:

2、使用谷歌浏览器,在谷歌浏览器的设置中查询自己的谷歌浏览器的版本:设置→关于

3、下载谷歌浏览器驱动

​ 下载地址:https://registry.npmmirror.com/binary.html?path=chromedriver/

​ 找到符合版本号的驱动文件夹

选择适合你电脑的驱动版本,window下载win32的就好了


下载之后,将解压的文件放在python的目录中

三、使用selenium写自动化网页操作脚本

1、import要用到的包

import time
import os
import shutil
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait

咱也分不清这些包具体哪个是干嘛的,但是在程序里都用上了

2、selenium使用

思路:由于selenium自动化脚本是模拟人的操作,所以程序就按照你对这个网站进行操作的顺序写

2.1打开谷歌浏览器、窗口最大化

driver = webdriver.Chrome()
driver.maximize_window()

2.2输入网址

driver.get("你要让程序进入的网址")

2.3selenium的定位

selenium的定位到某一个网页上的元素(输入框、按钮等)的方法共有八种,具体是哪八种可以百度,这里只介绍我用到最方便的一种(XPATH定位)。举个例子。

在网页中按F12,显示网页源码。点击定位器

再在网页上点击这个元素,源码中就会标出,比如我点击百度的输入框,这个输入框的代码的就会被标蓝色

右键标蓝代码→Copy→Copy XPath

这个时候你就复制了这个元素的xpath了,可以在程序中使用

比如:我要在登录页面输入账号和密码,然后点击登录按钮

driver.find_element(by=By.XPATH, value="你复制的账号输入框的XPath").send_keys("你的账号")
driver.find_element(by=By.XPATH, value="你复制的密码输入框的XPath").send_keys("你的密码")
driver.find_element(by=By.XPATH, value="你复制的登录按钮的XPath").click()

2.4selenium获取某一元素的文本,比如标签或者按钮上的文字

这个可以用于下载的数据表格文件的命名,否则下载的文件很可能是乱命名的,不便于我们的使用。

my_text = driver.find_element(by=By.XPATH, value="该元素的XPath").text

2.5selenium回到页面顶部或者拉到页面底部

我在程序中遇到某一页面滚动条被滑到底部之后,脚本中点击页面顶部的某个按钮就报错了,所以我思考需要将页面先滑回到顶部。(按钮点击无效有很多种情况,比如也可能是按钮被某些弹窗覆盖导致定位不到,百度多几种方法试试应该能解决)

#滑到底部
driver.execute_script("window.scrollTo(0,document.body.scrollHeight)")
#滑到顶部
driver.execute_script("var q=document.documentElement.scrollTop=0")

2.6selenium的等待页面加载

selenium的等待有三种,①傻瓜等待,sleep(3),这样就可以等待3秒。②隐式等待,设置一个时间上限,在这个时间内,当整个页面加载完成的时候或者达到时间上限的时候,退出等待(具体想了解的话可以百度)③显式等待(显示等待),我们往往不需要等到整个页面加载完,加载出我们所需要的数据就可以了

以下代码表示:时间上限1000s,在这个时间中,每0.5秒检查一次tag1的这个元素有没有加载出来,我的程序中定位的是数据表格底部的页码按钮,因为这按钮出来了就表示我要的表格中的数据都加载出来了,当这个元素被加载出来或者是到达1000s上限的时候,就停止等待了。

    tag1 = (By.XPATH, "加载出的元素的xpath") #当这个元素加载出来的时候,就停止等待了try:WebDriverWait(driver, 1000, 0.5).until(EC.presence_of_element_located(tag1))except:print("量表字段加载失败")break

3、判断文件是否下载完成、整理下载的文件

  • 这里使用查看文件夹中文件列表的方法判断文件是否下载完成,我爬的就是csv文件,所以这样做是没问题的。如果是其他的有可能遇到文件夹中出现系统文件或者临时文件,要通过限定文件后缀之类的方法排除。

  • 这里是设置了20s内每0.5秒检查一次,如果发现文件夹中文件已经存在,就停止等待和检查。

  • 将下载的文件**重命名并整理(复制)**到新的文件夹中,我的命名是在网页中通过.text获得的信息(往上看2.4中)

  • 文件整理到新的文件夹中之后,删除os.remove下载文件夹中的这一个文件,以免跟下一个下载的文件混淆

def find_file(path, all_files,liangbiao):file_list = os.listdir(path)seconds = 0dl_wait = Truewhile dl_wait and seconds < 20:if file_list == []:time.sleep(0.5)seconds += 0.5file_list = os.listdir(path)else:dl_wait = Falsefor file in file_list:full_path = os.path.join(path, file)file_name = os.path.basename(full_path)new_dir = sort_path + liangbiaonew_path = new_dir + '//' + liangbiao + '.csv'if os.path.exists(new_path):print("该文件夹已存在,无法创建!")else:print("下载路径:{}".format(full_path))print("整理路径:{}".format(new_path))os.mkdir(new_dir)shutil.copyfile(full_path, new_path)os.remove(full_path)

4、完整代码

import time
import os
import shutil
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWaitfolder_path = "C://Users//Winner//Downloads"
sort_path = "D://Desktop//update//"driver = webdriver.Chrome()
driver.maximize_window()driver.get("我的数据网站登录页面网址")
print(driver.current_url)
print(driver.title)
driver.find_element(by=By.NAME, value="username").send_keys("我的账号")
driver.find_element(by=By.NAME, value="password").send_keys("我的密码")
driver.find_element(by=By.NAME, value="login").click()def find_file(path, all_files,liangbiao):file_list = os.listdir(path)seconds = 0dl_wait = Truewhile dl_wait and seconds < 20:if file_list == []:time.sleep(0.5)seconds += 0.5file_list = os.listdir(path)else:dl_wait = Falsefor file in file_list:full_path = os.path.join(path, file)file_name = os.path.basename(full_path)new_dir = sort_path + liangbiaonew_path = new_dir + '//' + liangbiao + '.csv'if os.path.exists(new_path):print("该文件夹已存在,无法创建!")else:print("下载路径:{}".format(full_path))print("整理路径:{}".format(new_path))os.mkdir(new_dir)shutil.copyfile(full_path, new_path)os.remove(full_path)for i in range(16, 150):num = i+1print("===================================开始爬取第%s个量表=========================================================" % i)xpath1 = ("//*[@id='DefineFields']/div/div[3]/div[1]/div/div/ul/li[%s]/div/label" % num)driver.get("https://data.healthybrainnetwork.org/dataquery/")print("进入页面dataquery")driver.find_element(by=By.XPATH, value="//*[@id='reactTest']/div/div[2]/nav/ul[1]/li[2]").click()print("进入DefineFields")driver.find_element(by=By.XPATH, value="//*[@id='DefineFields']/div/div[3]/div[1]/div/div/button").click()print("Select One 点击成功")liangbiao = driver.find_element(by=By.XPATH, value=xpath1).textliangbiao_i = str(i) + liangbiaodriver.find_element(by=By.XPATH, value=xpath1).click()print("量表标签选择成功,等待{}的字段加载中.......".format(liangbiao))tag1 = (By.XPATH, "//*[@id='DefineFields']/div/div[4]/div/ul")try:WebDriverWait(driver, 1000, 0.5).until(EC.presence_of_element_located(tag1))except:print("量表字段加载失败")breakprint("字段页面加载成功")try:driver.execute_script("var q=document.documentElement.scrollTop=0")except:print("滚动到页面顶部失败")driver.find_element(by=By.XPATH, value="//*[@id='DefineFields']/div/div[2]/div/button[1]").click()print("Add All按钮点击成功")driver.find_element(by=By.XPATH, value="/html/body/div[1]/div/div/div[2]/div/div/div/div[2]/nav/ul[1]/li[4]").click()print("进入View Data页面")driver.find_element(by=By.XPATH, value="//*[@id='ViewData']/div[1]/div[1]/button").click()print("Run Query按钮点击成功")tag = (By.XPATH, "//*[@id='ViewData']/div[3]/div[3]/div/div/div[2]/button")try:WebDriverWait(driver, 1000, 0.5).until(EC.presence_of_element_located(tag))except:print("数据查询失败")breakprint("数据查询成功,开始下载csv文件")driver.find_element(by=By.XPATH, value="//*[@id='ViewData']/div[3]/div[3]/div/div/div[2]/button").click()print("Download Table as CSV按钮点击成功")#对下载的文件进行整理归档contents_list = find_file(path=folder_path, all_files=[],liangbiao = liangbiao_i)

python和selenium爬虫,网页表格下载自动化脚本相关推荐

  1. Dataset之MNIST:MNIST(手写数字图片识别+ubyte.gz文件)数据集的下载(基于python语言根据爬虫技术自动下载MNIST数据集)

    Dataset之MNIST:MNIST(手写数字图片识别+ubyte.gz文件)数据集的下载(基于python语言根据爬虫技术自动下载MNIST数据集) 目录 数据集下载的所有代码 1.主文件 mni ...

  2. 利用python模块pandas获取网页表格,并保存为excel

    文章只用于学习交流 利用python模块pandas获取网页表格. 网页上的表格内容,想要保存下来,有没有办法呢?答案是有的. 主要有两个步骤, 一是读取表格内容, 二是保存读取后的内容. 在这里只讲 ...

  3. python爬虫网页表格_python网页表格

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 以网页表格为例:https:www.kuaidaili.comfree该网站数据 ...

  4. Python 抓取动态网页表格信息

    五一假期,研究了下Python抓取动态网页信息的相关操作,结合封面的参考书.网上教程编写出可以满足需求的代码.由于初涉python,过程中曲折很多,为了避免以后遇到问题找不到相关的信息创建本文. 准备 ...

  5. python 使用 selenium 爬虫知乎

    python 使用 selenium 模拟浏览器进行爬取知乎 说起爬虫一般想到的情况是,使用 python 中都通过 requests 库获取网页内容,然后通过 beautifulSoup 进行筛选文 ...

  6. Python学习:用Selenium读取网页表格

    1.获取表格元素: 表格的结构一般以table标签开始,此函数是获取table元素的,一个网页中可能不止一个表格,此处返回表格元素的列表. def GetTableElements():'''获得ta ...

  7. python爬虫 网页表格

    from bs4 import BeautifulSoup import requests import csv import bs4 #检查url地址 def check_link(url): tr ...

  8. Python之selenium爬虫实战爬取表情包

    文章目录 前言 寻找目标 思路分析 步骤实现 爬取过程 实现效果 以下是全部代码 提示:以下是本篇文章正文内容,下面案例可供参考 前言 大家点进来看selenium操作,那么你应该知道 seleniu ...

  9. [python]利用Selenium实现网页全屏截图+部分截图并web实现

    好久都没有写文章了,今天记录一下. 实现目标 我的目标是输入一段网址,能够得到该网页的一部分截图. 思路: 根据网址打开网页 先全屏截图,再保存成图片 之后对这张图片进行部分截图 代码 我不需要滚动截 ...

最新文章

  1. Python 是一门怎样的语言
  2. 皮一皮:女友是有多么体贴...
  3. range 小程序picker_微信小程序-官方组件picker云开发省市区三级联动选择器
  4. CRMEB系统安装访问不了
  5. 运行APP脚本的步骤
  6. 笔记本卡顿不流畅是什么原因_为什么越来越多的笔记本电池不可拆卸
  7. python函数sn_Python plist.SndRcvList方法代码示例
  8. linux 如何查看远程代码分支,linux看git 创建分支、删除本地分支、查看远程分支、本地分支例子...
  9. 冯偌依曼计算机的基本原理是,03级计算机专《计算机组成原理》试卷A.doc
  10. ERP项目实施记录09
  11. 菠萝在线完成数千万元A轮融资,盛力投资领投
  12. css3相关笔记(五)
  13. [译] 实例解析 ES6 Proxy 使用场景
  14. 黑苹果 无线网卡相关配置
  15. 各种工具配置忽略证书
  16. Mybaits-Plus Invalid bound statement (not found) 问题
  17. MD5、SHA、AES、Rabit 、RC4、TripleDES Ripemd160 加密解密工具
  18. GEO数据库数据下载
  19. 思科模拟器入门基础-静态路由
  20. 阿里云服务器是国内的还是国外的?

热门文章

  1. 爱拼车 android 源码,爱拼车 1.8.8
  2. ICS文件说明和创建(以Outlook为例)
  3. HttpException: 503: Server Error for url:http://cic-1:9696/v2.0/security-groups, Service Unavailable
  4. 快速上手Springboot项目(登录注册保姆级教程)
  5. 全球首个5G火车站落户上海虹桥!
  6. 三种方法查看电脑IP地址是否被占用
  7. UITextField 的左视图 --用户名和密码框的标志
  8. Mac查看电池健康情况、电池损耗的方法
  9. CodeForces-1062E LCA,DFN,RMQ
  10. 2022年沈阳市施工员(装修装饰)考试练习题及答案