爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 5513|回复: 3

[经验总结] 爬虫效率神器---Selenium IDE插件使用方法

[复制链接]

新浪微博达人勋

发表于 2022-6-18 14:22:58 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 15195775117 于 2022-6-18 14:25 编辑

1 需求缘起

工作中常有些周期性的工作,例如每天在某几个网站上获取数据,或填写提交材料。
这种比较固定的操作浏览器的步骤,可以用【Selenium自动化测试工具】写成Python脚本,自动执行。
但是,如果操作浏览器的步骤比较多,那写脚本的过程就比较麻烦了。
这时,我们可以使用浏览器插件---Selenium IDE!它具有类似“视频录制”的功能---你启动它,然后在网页上一通操作,它就会把你的操作“录制”下来,只不过它不是保存视频,而是保存你的操作步骤。最后,你可以将这些操作步骤导出为程序脚本,自由选择Python或Java等语言版本。这个工具,比直接写代码高效不少。
其实,很多软件都提供了这种录制功能:
(1)Photoshop的“动作记录”可以记录你对一张图的P图操作,导出为exe文件,之后你把几百张图全选,往这个exe上一拖,就能批量处理;(百度经验有收录)
(2)谷歌地球的“游览”功能,可以录制你在谷歌地球上的操作,最后导出为kml文件,其他人拿到这个文件,在谷歌地球上“播放”,就能看到你的操作过程。

2 插件安装

目前selenium主要配合Chrome浏览器使用。由于谷歌在国内受限,在谷歌浏览器装Selenium IDE插件不方便:
image1.png

不过,windows系统的【edge浏览器】也用的谷歌浏览器内核。我平时都是在edge浏览器上查看网页源码,然后用selenium驱动Chrome浏览器,并未出现不兼容的情况。所以,从edge浏览器导出的脚本,也是适用于Chrome浏览器的。所以,这里我们在edge上使用selenium IDE插件。

2.1 安装步骤

打开edge,打开【扩展】,点击【打开Microsoft Edge外接程序网站】,搜索“selenium IDE”:
image2.png image3.png image4.png
我们安装这个:
image5.png

2.2 操作录制

我们准备查看某个城市的历史天气数据。
插件装好后,从【扩展】打开【selenium IDE】,然后弹出了这个插件的操作界面:
image6.png image7.png
我们需要先新建一个工程,起个名字:
image8.png image9.png
在该工程下新建一个test,也起个名字:
image10.png image11.png
点击开始录制:
image12.png
填入从哪个网页开始爬:
image13.png

这时,edge会弹出来,你在上面一通操作,操作结束后,回到插件,点击结束:
image14.png
点击你的test的右侧,点击【Export】,选择以Python语言导出:
image15.png image16.png image17.png


2.3 使用导出的脚本

打开脚本,把import部分中没用到的(灰色的)都删了:
image18.png
类中的method参数也没有用到,也删了;再把“setup_method”改为“__init__”
image19.png

通过引用“导出的爬虫的类”执行爬虫程序:
x=TestFirsttest()        # 新建爬虫对象
x.test_firsttest()        # 执行爬虫
x.teardown_method()        # 销毁爬虫对象

如果你没有设置“无头模式”,运行开始后,就会弹出谷歌浏览器,把你刚才操作的重复一遍,只是快了许多。

程序中把“南京”换成“杭州”,爬的就是杭州的历史天气了:
image20.png

评分

参与人数 1金钱 +5 收起 理由
贫道敬孔 + 5 很给力!

查看全部评分

密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2022-6-18 14:30:57 | 显示全部楼层
selenium-ide导出的爬虫脚本


import time
from selenium import webdriver
from selenium.webdriver.common.by import By


class TestFirsttest():
  def __init__(self):
    self.driver = webdriver.Chrome()
    self.vars = {}
  
  def teardown_method(self):
    self.driver.quit()
  
  def wait_for_window(self, timeout = 2):
    time.sleep(round(timeout / 1000))
    wh_now = self.driver.window_handles
    wh_then = self.vars["window_handles"]
    if len(wh_now) > len(wh_then):
      return set(wh_now).difference(set(wh_then)).pop()
  
  def test_firsttest(self):
    self.driver.get("https://tianqi.2345.com/")
    self.driver.set_window_size(1552, 840)
    self.driver.find_element(By.ID, "js_searchInput").click()
    self.driver.find_element(By.ID, "js_searchInput").send_keys("杭州")
    self.driver.find_element(By.ID, "js_searchBtn").click()
    self.vars["window_handles"] = self.driver.window_handles
    self.driver.find_element(By.LINK_TEXT, "历史天气").click()
    self.vars["win2704"] = self.wait_for_window(2000)
    self.driver.switch_to.window(self.vars["win2704"])
    self.driver.find_element(By.ID, "js_monthVal").click()
    self.driver.find_element(By.LINK_TEXT, "5月").click()
    self.driver.find_element(By.ID, "js_monthVal").click()
    self.driver.find_element(By.LINK_TEXT, "4月").click()
    self.driver.find_element(By.ID, "js_monthVal").click()
    self.driver.find_element(By.LINK_TEXT, "1月").click()


        
# 使用方法:
# 新建爬虫对象:
x=TestFirsttest()
# 执行爬虫:
x.test_firsttest()
# 销毁爬虫对象:
x.teardown_method()

selenium-ide导出的爬虫脚本.py

1.88 KB, 下载次数: 1, 下载积分: 金钱 -5

密码修改失败请联系微信:mofangbao
回复 支持 1 反对 0

使用道具 举报

新浪微博达人勋

发表于 2022-6-23 09:49:43 | 显示全部楼层
哇,爬虫厉害了,感谢大佬分享
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2022-7-4 23:24:45 | 显示全部楼层
使用心得追加:
导出的爬虫文件操作太快,网页会跟不上速度,导致定位不到元素而报错,可以在代码之间插入一些“核反应减速碳棒”:time.sleep(3)
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

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