爬虫笔记17——selenium框架的使用

selenium框架的使用

  • 1、python程序安装selenium框架
  • 2、下载Chrome谷歌驱动
  • 3、selenium的基本使用
  • 4、多个标签页切换顺序混乱的问题

1、python程序安装selenium框架

# 在安装过程中最好限定框架版本为4.9.1
# pip install selenium 没有制定版本,非镜像下载也会比较慢
# 建议用下面这句命令
pip install selenium==4.9.1 -i https://pypi.tuna.tsinghua.edu.cn/simple

安装完selenium后,还需要安装使用selenium控制的浏览器需要的驱动。

2、下载Chrome谷歌驱动

需要下载Chrome浏览器版本对应的驱动,可以通过下面这个链接下载。
谷歌驱动下载地址:https://googlechromelabs.github.io/chrome-for-testing/#stable

驱动下载完成后要将文件移动到系统环境变量中:
● MacOS:将文件移动到/usr/local/bin目录
● Windows:将文件移动到python环境的安装目录下

或者自动义驱动路径:
直接复制下载的驱动.exe文件
在这里插入图片描述

然后粘贴到你程序的文件下,再进行指定即可使用了:
在这里插入图片描述

import time
from selenium import webdriver
from selenium.webdriver.chrome import service  #指导驱动路径# 自定义指定驱动
service = service.Service(executable_path='./chromedriver.exe')browser = webdriver.Chrome()browser.get('https://www.baidu.com')

3、selenium的基本使用

import time
from selenium import webdriver
from selenium.webdriver.common.by import By# 获取要操作的浏览器对象
browser = webdriver.Chrome()
# browser = webdriver.Firefox()# 自动加载指定的页面
browser.get('https://www.baidu.com')# 获取指定的元素
input_text = browser.find_element(By.ID, 'kw')
# 在指定的元素上输入值
input_text.send_keys('Python')button = browser.find_element(By.ID, 'su')
# 操作点击指定的标签
button.click()# 查看加载网页的源代码
print(browser.page_source)# 获取网页的cookies
print(browser.get_cookies())# 查看经过处理之后,本页面最后显示的url,如果有重定向的话,那么就是302之后的url
print(browser.current_url)# 打开新页面,但是会覆盖原来的标签页面
browser.get('https://www.bilibili.com')# 要不覆盖打开新的标签页的话,可以执行js代码中的window.open('https://www.bilibili.com')
code_js = "window.open('https://www.jd.com')"
browser.execute_script(code_js)# 在浏览器有多个标签页的情况下,可以进行切换标签页
browser.switch_to.window(browser.window_handles[0])# 让当前的标签页退出
browser.close()

4、多个标签页切换顺序混乱的问题

window_handles列表保存了根据顺序打开的标签页句柄,但是在某些特殊的情况下标签页顺序和列表句柄元素顺序不一致,比如网络速度或页面响应速度的不同会导致实际打开页面的顺序和预期不同。所以在代码中不能完全依赖列表索引的方式完成页面切换。
解决方式如下:

import time
from selenium import webdriverbrowser = webdriver.Chrome()
js_code = "window.open('https://www.baidu.com')"
browser.execute_script(js_code)
time.sleep(2)js_code = "window.open('https://www.bilibili.com')"
browser.execute_script(js_code)
time.sleep(2)js_code = "window.open('https://www.jd.com')"
browser.execute_script(js_code)
time.sleep(2)browser.switch_to.window(browser.window_handles[0])# 打印当前所有标签页的窗口句柄
print(browser.window_handles)# 打印所有句柄对应的标签页名称
for handle in browser.window_handles:browser.switch_to.window(handle)print("页面标题: {},句柄: {}".format(browser.title,handle))for handle in browser.window_handles:browser.switch_to.window(handle)# 通过页面标题或URL来定位if ("百度" in browser.title) or ("baidu.com" in browser.current_url):print("已切换到百度页面:", handle)time.sleep(2)browser.close()  # 关闭百度标签页elif ("哔哩" in browser.title) or ("bilibili.com" in browser.current_url):print("已切换到哔哩页面:", handle)time.sleep(2)else:print('已切换到京东页面:', handle)time.sleep(2)print(browser.window_handles)
browser.quit()

以上就是selenium的基本使用了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/363651.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

秋招突击——第七弹——Redis快速入门

文章目录 引言Redis是什么 正文对象String字符串面试重点 List面试考点 压缩列表ZipList面试题 Set面试题讲解 Hash面试重点 HASHTABLE底层面试考点 跳表面试重点 ZSET有序链表面试重点 总结 引言 在项目和redis之间,我犹豫了一下,觉得还是了解学习一下…

设计模式5-策略模式(Strategy)

设计模式5-策略模式 简介目的定义结构策略模式的结构要点 举例说明1. 策略接口2. 具体策略类3. 上下文类4. 客户端代码 策略模式的反例没有使用策略模式的代码 对比分析 简介 策略模式也是属于组件协作模式一种。现代软件专业分工之后的第一个结果是框架语音应用程序的划分。组…

金顺心贸易有限公司简介

金顺心贸易有限公司成立于2015年,注册地位于风景如画的广西壮族自治区防城港市东兴市。 金顺心贸易如他们的名字一样,有着实实在在的业绩和口碑的。他们专注于国际贸易,主营越南进口食品:果汁饮料、春卷皮、调味品、汤底、米粉、…

RabbitMQ消息队列 安装及基本介绍

一.MQ介绍 Message Queue (MQ)是一种跨进程的通信机制,用于在系统之间进行传递消息。MQ作为消息中间件,可以进行异步处理请求,从而减少请求响应时间和解耦 1.1 应用场景 1.1.1 系统之间通过MQ进行消息通信&#xff0…

动手学深度学习(Pytorch版)代码实践 -计算机视觉-41目标检测数据集

41目标检测数据集 import os import pandas as pd import torch import torchvision import matplotlib.pylab as plt from d2l import torch as d2l# 数据集下载链接 # http://d2l-data.s3-accelerate.amazonaws.com/banana-detection.zip# 读取数据集 #save def read_data_b…

Windows 系统 Solr 8.11.3 安装详细教程(最新)

Windows 系统 Solr 8.11.3 安装详细教程 说明什么是Solr下载与解压如何启动启动命令:浏览器中打开dashboard其他命令查看关闭命令 说明 本次只是简单安装,为了在项目中使用,如果在公开服务器中安装需要更改开放端口,配置权限等。 …

【PL理论深化】(8) Ocaml 语言:元组和列表 | 访问元组中的元素 | 列表中的 head 和 tail | 基本列表操作符

💬 写在前面:本章我们将探讨 OCaml 中的元组(tuple)和列表(list),它们是函数式编程语言中最常用的数据结构。 目录 0x00 元组(Tuple) 0x01 访问元组中的元素 0x02 列表&…

《单片机》期末考试复习-学习笔记总结

题型 问答题(15分)编程题(65分)编程题1(20分)编程题2(45分)设计题(20分)一、问答题 1.1.单片机概念和特点 1.2. 51单片机的中断结构 1.3.主从式多机通讯的概念及其工作原理 多机通信是指两台以上计算机之间的数据传输,主从式多机通信是多机通信系统中最简单的一种,…

SerDes介绍以及原语使用介绍(2)OSERDESE2原语仿真

文章目录 前言一、SDR模式1.1、设计代码1.2、testbench代码1.3、仿真分析 二、DDR模式下2.1、设计代码2.2、testbench代码2.3、仿真分析 三、OSERDES2级联3.1、设计代码3.2、testbench代码3.3、代码分析 前言 上文通过xilinx ug471手册对OSERDESE有了简单的了解,接…

PHP爬虫类的并发与多线程处理技巧

PHP爬虫类的并发与多线程处理技巧 引言: 随着互联网的快速发展,大量的数据信息存储在各种网站上,获取这些数据已经成为很多业务场景下的需求。而爬虫作为一种自动化获取网络信息的工具,被广泛应用于数据采集、搜索引擎、舆情分析…

柔性数组(flexible array)

柔性数组从C99开始支持使用 1.柔性数组的概念 概念: 结构体中,结构体最后一个元素允许是未知大小的数组,这就叫[柔性数组]的成员 struct S {int n;char arr[]; //数组大小未知(柔性数组成员) }; 柔性数组的特点: 结构体中柔性…

九、(正点原子)Linux定时器

一、Linux中断简介 1、中断号 每个中断都有一个中断号,通过中断号即可区分不同的中断,有的资料也把中断号叫做中断线。在 Linux 内核中使用一个 int 变量表示中断号。在Linux中,我们可以使用已经编写好的API函数来申请中断号,定义…

基于公有云部署wordpress

云平台选择 腾讯云 阿里云 华为云 项目部署 一、架构讲解 1.1、定义与组成 LNMP是Linux、Nginx、MySQL(或MariaDB)和PHP(或Perl、Python)的首字母缩写,代表在Linux系统下使用Nginx作为Web服务器,MySQL作为…

ai轨迹过京东m端

声明(a15018601872) 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 本…

Unity Animator 运行时修改某个动画状态的播放速度

1.添加动画参数,选择需要动态修改速度的动画状态 2.在属性面板种设置速度倍速参数

自然语言处理(NLP)—— 深度学习

1. 词嵌入(Embeddings) 1.1 词嵌入的基本概念 词嵌入(Embeddings)是一种将词语映射到高维空间(比如N300维)的技术,使得词语之间的欧几里得距离与它们的语义距离相关联。这意味着在这个向量空间…

windows MSVC编译安装libcurl

$ git clone https://github.com/curl/curl.git $ cd curl/winbuild依照curl/winbuild/README.md的指示, 启动visual studio的命令行工具,这里要注意别选错. 如果要编译出x64版本的libcurl,就用x64的命令行工具;如果要编译出x86…

论文学习:基于知识图谱的RAG进行客服问答

1.简介 文章名称: Retrieval-Augmented Generation with Knowledge Graphs for Customer Service Question Answering(基于知识图谱的RAG进行客服问答) 2.摘要ABSTRACT 在客户服务技术支持中,迅速准确地检索相关的过往问题对于有…

【干货】微信小程序免费开源项目合集

前言 2024年了,还有小伙伴在问微信小程序要怎么开发,有什么好的推荐学习项目可以参考的。今天分享一个收集了一系列在微信小程序开发中有用的工具、库、插件和资源:awesome-github-wechat-weapp。 开源项目介绍 它提供了丰富的资源列表&…

【每日一练】python运算符

1. 算术运算符 编写一个Python程序,要求用户输入两个数,并执行以下运算:加法、减法、乘法、求余、除法、以及第一个数的第二个数次方。将结果打印出来。 a input("请输入第一个数:") b input("请输入第二个数&…