Selenium入门(自动右键保存图片到本机上)

4,601 阅读4分钟

前言

入职测开一段时间,基本就是熟悉需求,熟悉业务,熟悉这熟悉那,再跟着需求做各种各样的测试和联调,趁着业余时间,也是学习了一下Selenium,在之前Selenium是我作为爬虫的工具,不过之后就用来做写一些自动化测试脚本啦~~(这里使用Python中的Selenium库进行Coding~~

1、什么是Selenium

Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google,Chrome,Opera等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成 .Net、Java、Perl等不同语言的测试脚本。(取自百度,简而言之就是可以模拟用户去操作浏览器,可支持许多浏览器驱动。)

2、前期准备

我们此次需要的python库有selenium、pyautogui,图片来源:wallhaven.cc/

pip install selenium
pip install pyautogui

ps:安装selenium需要注意浏览器版本与驱动版本是否匹配

3、导入相关库

from selenium import webdriver
import time
import re
from selenium.webdriver.common.action_chains import ActionChains
import pyautogui

4、声明并调用浏览器,打开网页,自动搜索

browser = webdriver.Chrome()
url = 'https://wallhaven.cc/'
browser.get(url)

之后应该会自动打开这个页面,我们想做的是自动输入图片名称,然后点击小放大镜,所以我们应该需要先获得这两个元素,获得元素的方式大概有以下几种:

find_element_by_name
find_element_by_id
find_element_by_xpath
find_element_by_link_text
find_element_by_partial_link_text
find_element_by_tag_name
find_element_by_class_name
find_element_by_css_selector

我们首先把光标放到元素上,然后右键-检查(Chrome浏览器),就可以定位到相应的代码下,然后右键-COPY-COPY XPATH(也可以COPY其他方式)。

我这里利用id和xpath分别获得输入框和搜索按钮两个元素。

input_ = browser.find_element_by_id('search-text') #获取输入框元素
input_.send_keys('Makise Kurisu') #输入要搜索的名称
time.sleep(2) #睡两秒
button_ = browser.find_element_by_xpath('//*[@id="startpage-search"]/div/button') #获取搜索按钮元素
button_.click() #进行点击

之后浏览器就会自动进行输入和搜索~

5、获取每张图片的预览点击链接,并自动进入每张图片进行右键-保存

text = browser.page_source # 获取页面信息
pattern = re.compile(r'<a class="preview" href="(.*?)" target="_blank">')
res = re.findall(pattern,text) # 正则表达式匹配

首先获取每个图片的预览链接,这里我利用正则去获取,也可以利用xpath等方式。

for i in res:
    browser.get(i) # 进入链接
    time.sleep(3)
    pic = browser.find_element_by_xpath('//*[@id="wallpaper"]') # 获取元素
    action = ActionChains(browser).move_to_element(pic)  # 移动到该元素
    action.context_click(pic)  # 右键点击该元素
    action.perform() # 执行
    pyautogui.typewrite(['v']) # 敲击V进行保存
    # 单击图片另存之后等1s敲回车
    time.sleep(1)
    pyautogui.typewrite(['enter'])

之后就是遍历每一个url,进行右键-保存操作,具体可以看代码~注释很详细。

PyAutoGUI是一个纯Python的GUI自动化工具,可以用程序自动控制鼠标和键盘操作,我利用Selenium尝试自动右键保存多次无果,采用了这个方式,也是很顺利完成了。(如果有Selenium可以自动右键并回车的方式务必分享一下~~)

6、总结

至此算是正式结束了,接下来放上所有代码

from selenium import webdriver
import time
import re
from selenium.webdriver.common.action_chains import ActionChains
import pyautogui

browser = webdriver.Chrome()
url = 'https://wallhaven.cc/'
browser.get(url)

input_ = browser.find_element_by_id('search-text') #获取输入框元素
input_.send_keys('Makise Kurisu') #输入要搜索的名称
time.sleep(2) #睡两秒
button_ = browser.find_element_by_xpath('//*[@id="startpage-search"]/div/button') #获取搜索按钮元素
button_.click() #进行点击

text = browser.page_source # 获取页面信息
pattern = re.compile(r'<a class="preview" href="(.*?)" target="_blank">')
res = re.findall(pattern,text) # 正则表达式匹配
for i in res:
    browser.get(i)
    time.sleep(3)
    pic = browser.find_element_by_xpath('//*[@id="wallpaper"]')
    action = ActionChains(browser).move_to_element(pic)  # 移动到该元素
    action.context_click(pic)  # 右键点击该元素
    action.perform() # 执行
    pyautogui.typewrite(['v']) # 敲击V进行保存
    # 单击图片另存之后等1s敲回车
    time.sleep(1)
    pyautogui.typewrite(['enter'])

time.sleep(10)
browser.close()

偷偷吐槽一句,可能实习期间接触的东西还是不多,有时甚至觉得有些无聊,但还是要在完成需求的空暇时间不断完善自己,让自己不断成长~