21.9 Python 使用Selenium库
Selenium是一个自动化测试框架,主要用于Web应用程序的自动化测试。它可以模拟用户在浏览器中的操作,如打开网页、点击链接、填写表单等,并且可以在代码中实现条件判断、异常处理等功能。Selenium最初是用于测试Web应用程序的,但也可以用于其他用途,如爬取网站数据、自动化提交表单等。Selenium支持多种编程语言,如Java、Python、C#等,同时也支持多种浏览器,如Chrome、Firefox、Safari等。
该工具在使用时需要安装两个模块,首先读者需要自行安装selenium
包,并且需下载与对应浏览器匹配的驱动程序。
- 安装PIP包:pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple
- 安装驱动程序:https://chromedriver.storage.googleapis.com/index.html
我们以Google
浏览器为例,此处本人的版本为112.0.5615.121(32 位)
根据该版本下载对应的驱动程序,并将驱动程序放入到Google
浏览器根目录下,如下图所示,此时的驱动就已经安装成功了;
21.9.1 模拟打开页面
当需要使用浏览器模拟时,首先我们要调用webdriver.Chrome(executable_path=WebPath)
函数并传入驱动程序路径,此时即可打开驱动程序与谷歌浏览器链接,接着就可以通过各类函数操控浏览器行为。
from selenium import webdriver
from selenium.webdriver.common.by import By
WebPath = "C:/Users/admin/AppData/Local/Google/Chrome/Application/chromedriver.exe"
if __name__ == "__main__":
driver = webdriver.Chrome(executable_path=WebPath)
# 设置窗口大小为1275*765
driver.set_window_size(1275, 765)
# 设置窗体为全屏
driver.maximize_window()
# 获得窗口大小
get_size = driver.get_window_size()
print("获取窗口大小: {}".format(get_size))
# 获取当前窗体句柄
handle = driver.current_window_handle
print("当前句柄: {}".format(handle))
# 打开链接并得到页面源代码
url = "https://www.baidu.com"
driver.get(url)
url_source = str(driver.page_source)
# print("页面源代码: {}".format(url_source))
# 定位a标签并点击,跳转到贴吧
click_url = driver.find_element(By.XPATH, '//*[@id="s-top-left"]/a[4]')
click_url.click()
# 打开页面后输出所有窗体句柄
all_handles = driver.window_handles
print("当前所有窗体句柄: {}".format(all_handles))
input("输入回车结束")
driver.quit()
上述代码片段中,首先通过set_window_size()
函数将浏览器页面设置为1275*765
接着再调用maximize_window()
设置为全屏,通过得到当前窗体句柄,并通过get()
函数让浏览器打开一个页面,最后通过xpath
语法定位到//*[@id="s-top-left"]/a[4]
标签(贴吧)上,并点击鼠标左键,打开页面后并输出所有窗体,如下图所示;
21.9.2 切换窗体句柄
如上代码执行后虽然打开了百度百科,但是窗体的句柄其实还是停留在了百度首页上,定位的元素还是在百度上,此时我们就需要切换窗体句柄,也就是将当前句柄切换到百度贴吧页面上,此时才可读取该页面的完整源代码信息。
我们通过使用all_handles[-1]
的方式切换到最后一个窗体上,也就是对应的百度贴吧页面,接着再执行switch_to.window(new_handle_tieba)
函数实现窗口句柄的切换功能,代码如下所示;
from selenium import webdriver
from selenium.webdriver.common.by import By
WebPath = "C:/Users/admin/AppData/Local/Google/Chrome/Application/chromedriver.exe"
if __name__ == "__main__":
driver = webdriver.Chrome(executable_path=WebPath)
# 设置窗口大小为1275*765
driver.set_window_size(1275, 765)
# 打开链接并得到页面源代码
url = "https://www.baidu.com"
driver.get(url)
# 定位a标签并点击,跳转到贴吧
click_url = driver.find_element(By.XPATH, '//*[@id="s-top-left"]/a[4]')
click_url.click()
# 打开页面后输出所有窗体句柄
all_handles = driver.window_handles
print("当前所有窗体句柄: {}".format(all_handles))
# 从所有句柄的集合中,获取最后那个,也就是最新的
new_handle_tieba = all_handles[-1]
# 执行切换操作
driver.switch_to.window(new_handle_tieba)
# 切换后查看现在的句柄
now_handles = driver.current_window_handle
print("贴吧窗体句柄: {}".format(now_handles))
# 得到贴吧源代码
url_source = str(driver.page_source)
print(url_source)
input("输入回车结束")
driver.quit()
运行后读者可自行查询当前句柄所在位置,如下图所示;
21.9.3 前进后退刷新
在控制页面是我们可能需要使用页面前进后退与刷新功能,前进时可以调用driver.forward()
函数实现,后退调用driver.back()
函数,而刷新则可调用driver.refresh()
函数,功能如下案例所示;
from selenium import webdriver
from selenium.webdriver.common.by import By
WebPath = "C:/Users/admin/AppData/Local/Google/Chrome/Application/chromedriver.exe"
if __name__ == "__main__":
driver = webdriver.Chrome(executable_path=WebPath)
# 设置窗口大小为1275*765
driver.set_window_size(1275, 765)
# 打开链接
driver.get(url="https://www.baidu.com")
driver.get(url="https://www.lyshark.com")
# 后退上一页,等待3秒
driver.implicitly_wait(3)
driver.back()
# 前进下一页,等待3秒
driver.implicitly_wait(3)
driver.forward()
# 刷新页面,等待3秒
driver.implicitly_wait(3)
driver.refresh()
# 获取当前页面句柄,并切换过去
handle = driver.current_window_handle
driver.switch_to.window(handle)
# 得到源代码
url_source = str(driver.page_source)
print(url_source)
# 关闭当前窗口
driver.close()
input("输入回车结束")
driver.quit()
运行后读者可自行观察输出效果,如下图所示;
21.9.4 自动页面采集
如下是一个综合案例,在案例中我们通过使用三种解析库实现了对百度页面中特定关键字的采集,当运行后读者可自行判断是否存在安全验证,如果存在可自行手动绕过检测,并输入y
此时即可实现关键字的采集,当采集完成后自动柏村委html
格式文件。
import re,argparse,requests
from selenium import webdriver
from bs4 import BeautifulSoup
from queue import Queue
WebPath = "C:/Users/admin/AppData/Local/Google/Chrome/Application/chromedriver.exe"
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("--search",dest="search",help="输入要搜索的语法,inurl:lyshark")
args = parser.parse_args()
if args.search:
driver = webdriver.Chrome(executable_path=WebPath)
driver.set_window_size(1024,768)
queue = Queue()
# 生成链接
for item in range(0,1000,10):
queue.put('https://www.baidu.com/s?wd={}&pn={}'.format(str(args.search),str(item)))
# 每次吐出一个
for item in queue.queue:
driver.get(item)
ret = str(driver.page_source)
# 是否有验证
if driver.title == "百度安全验证":
print("请用户完成验证,并输入y: ")
is_true = input()
if is_true != "y":
driver.close()
soup = BeautifulSoup(ret,'html.parser')
urls = soup.find_all(name='a',attrs={'data-click':re.compile(('.')),'class':None})
for item in urls:
try:
get_url = requests.get(url=item['href'],headers=head,timeout=5)
print(get_url)
if get_url.status_code == 200:
title = re.findall('<title>(.+)</title>', get_url.text)
print("[+] 抓取URL: {} 抓取标题: {}".format(get_url.url,title))
with open("save.html","a+") as fp:
fp.write("<a href={}>{}</a><br>".format(get_url.url,title))
except Exception:
pass
else:
parser.print_help()
运行上述代码,读者可观察输出效果,此时会自动抓取特定页面中的链接,并存储到本地;
21.9 Python 使用Selenium库的更多相关文章
- python爬虫---selenium库的用法
python爬虫---selenium库的用法 selenium是一个自动化测试工具,支持Firefox,Chrome等众多浏览器 在爬虫中的应用主要是用来解决JS渲染的问题. 1.使用前需要安装这个 ...
- 安装python的selenium库和驱动
对于使用selenium来进行python爬虫操作可以简化好多操作,它实际上的运行就是通过打开一个浏览器来一步一步的按照你的代码来执行 如果安装过python编译器后应该pip工具也是有的,验证pyt ...
- 使用Python的selenium库制作脚本,支持后台运行
本文介绍如何使用Python的selenium库制作脚本.概念: Selenium是一个用于测试网站的自动化测试工具,支持各种浏览器包括Chrome.Firefox.Safari等主流界面 ...
- python利用selenium库识别点触验证码
利用selenium库和超级鹰识别点触验证码(学习于静谧大大的书,想自己整理一下思路) 一.超级鹰注册:超级鹰入口 1.首先注册一个超级鹰账号,然后在超级鹰免费测试地方可以关注公众号,领取1000积分 ...
- Python爬虫-- selenium库
selenium库 selenium 是一套完整的web应用程序测试系统,包含了测试的录制(selenium IDE),编写及运行(Selenium Remote Control)和测试的并行处理(S ...
- 解决python 导入selenium 库后自动化运行成功但是报错问题
本章节开始进入自动化的基础教学了,首先我们要对我们的工具有一定的熟练使用程度,做自动化常用的工具一个是搭建 RobotFramework自动化框架,另外一个便是我们最常用的python 工作原理是比较 ...
- Python:利用 selenium 库抓取动态网页示例
前言 在抓取常规的静态网页时,我们直接请求对应的 url 就可以获取到完整的 HTML 页面,但是对于动态页面,网页显示的内容往往是通过 ajax 动态去生成的,所以如果是用 urllib.reque ...
- 浅谈python中selenium库调动webdriver驱动浏览器的实现原理
最近学web自动化时用到selenium库,感觉很神奇,遂琢磨了一下,写了点心得. 当我们输入以下三行代码并执行时,会发现新打开了一个浏览器窗口并访问了百度首页,然而这是怎么做到的呢? from se ...
- 使用python的selenium库刷超星网课
网课很多看不完呀 所以动手做了一个基础的自动答题和下一节的程序 用到了python 3 selenium Chrome 如何自动化Chrome?https://www.cnblogs.com/eter ...
- Python 中 selenium 库
目录 selenium 基础语法 一. 环境配置 1. 安装环境 2. 配置参数 3. 常用参数搭配 4. 分浏览器启动 二. 基本语法 1. 元素定位 2. 控制浏览器操作 3. 操作元素的方法 3 ...
随机推荐
- ASP.NET Web API Demo OwinSelfHost 自宿主 Swagger Swashbuckle 在线文档
新建Web API工程 选Empty,勾选Web API,不要选择Web API,那样会把MVC勾上,这里不需要MVC Web API工程属性 XML文件用于生成在线文档 新建Windows服务作为W ...
- LeetCode | 983.最低票价(动态规划)
在一个火车旅行很受欢迎的国度,你提前一年计划了一些火车旅行.在接下来的一年里,你要旅行的日子将以一个名为days的数组给出.每一项是一个从 1 到 365 的整数. 火车票有三种不同的销售方式: 一张 ...
- 【网络爬虫学习】Python 爬虫初步
本系列基于 C语言中文网的 Python爬虫教程(从入门到精通)来进行学习的, 部分转载的文章内容仅作学习使用! 前言 网络爬虫又称网络蜘蛛.网络机器人,它是一种按照一定的规则自动浏览.检索网页信息的 ...
- 【新手友好】用Pyspark和GraphX解析复杂网络数据
从零开始 在本文中,我们将详细介绍如何在Python / pyspark环境中使用graphx进行图计算.GraphX是Spark提供的图计算API,它提供了一套强大的工具,用于处理和分析大规模的图数 ...
- shell 编程中 awk ,wc ,$0,$1 等 命令的使用总结
本文为博主原创,转载请注明出处: 1. awk 的常用场景总结 2. wc 常用场景总结 3. $0,$1,$# 的使用总结 4. seq 的使用总结 5. 获取用户输入 read 使用 1. awk ...
- C++编译器选择是否自动生成代码的背后逻辑
C++编译器选择是否自动生成代码的背后逻辑 编译器会为class和struct(实际上两者在C++中是一回事)自动生成构造函数.赋值操作符函数和析构函数.如果不是这样,那么开发者就必须自己写一些枯燥冗 ...
- 如何使用 Helm 在 K8s 上集成 Prometheus 和 Grafana|Part 3
在本教程的前两部分,我们分别了解和学习了Prometheus 和 Grafana 的基本概念和使用的前提条件,以及使用 Helm 在 Kubernetes 上安装 Prometheus. 在今天的教程 ...
- 11-verilog-有限状态机
有限状态机 写RTL的时候,实现一个功能的时候有很多种方法 将系统划分为多个状态,状态之间有状态的转移,第一步,第二步......形成有限状态机 流水线技术设计,从输入到输出有多个步骤,多个步骤可以并 ...
- ORA-01017: 用户名/密码无效;登录被拒绝
总结 出现此错误的原因有多种: 您的用户名或密码实际上不正确 数据库配置不正确(tnanames.ora. $ORACLE_SID 参数) 现在,我们来看看这个错误的解决方案. ORA-01017 解 ...
- [转帖]Oracle 23c 才支持 TLS1.3
Transport Layer Security 1.3 Protocol Now Supported in Oracle Database Starting with Oracle Database ...