由于selenium更各版本用法不一,本文使用的环境是selenium4.13,python3.11.0,不同环境可能失效
忽略这一行
安装
pip install selenium
安装驱动
chrome浏览器
谷歌驱动官网下载地址 如果你的谷歌是最新版(在设置-关于Chrome查看版本),直接前往最新版下载地址 你还可以访问这个json文件查看113.+版本的所有驱动下载地址
Edge浏览器
首先把edge下载到最新,然后去这里安装那个稳定版就行
其他浏览器没用过就贴地址出来
- Firefox浏览器驱动: geckodriver
- IE浏览器驱动: IEDriverServer
- Opera浏览器驱动: operadriver
- PhantomJS浏览器驱动: phantomjs
放到python根目录下*(可选)
找到python安装目录然后把刚刚下载的.exe放下面就行,然后再设置一下环境变量
- 复制刚刚的python安装目录路径
- 打开设置-系统-高级系统设置-环境变量-用户变量-选中path项-编辑
- 看看有没有和刚刚复制的路径一样的,一般安装python时选择了自动添加就会有
- 如果没有就-新建-粘贴-完事
使用
第一次运行往往需要很长时间(1-5min),可能是程序正在处理那个驱动程序,总之程序只要没报错就别怕
1. 使用驱动实例开启浏览器对象
from selenium import webdriver
driver = webdriver.Chrome()
2. 使用get语句访问一个网页
driver.get("https://kabaiye.top")
3.可以访问driver(当前页面)的属性
title = driver.title
4. 发送命令 查找元素
使用driver.find_element()函数,使用之前需要导入By类
from selenium.webdriver.common.by import By
因为这个函数的第一项参数是将接收一个By对象。
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
driver = webdriver.Chrome()
driver.get("https://kabaiye.top/?p=155")
time.sleep(5)
#下面两种方式是等价的
tag1 = driver.find_element(By.XPATH,'//*[@id="header-id-1"]')
tag2 = driver.find_element(By.ID,'header-id-1')
print(tag1.text)
print(tag2.text)
# 安装bs4
# 安装bs4
下面是By类的所有属性,用法顾名思义
class By:
"""Set of supported locator strategies."""
ID = "id"
XPATH = "xpath"
LINK_TEXT = "link text"
PARTIAL_LINK_TEXT = "partial link text"
NAME = "name"
TAG_NAME = "tag name"
CLASS_NAME = "class name"
CSS_SELECTOR = "css selector"
相信聪明的你已经发现了,这个By类简单的离谱,就是一些字符串,那我们完全可以直接使用后面的字符串啊,就像这样:
tag2 = driver.find_element(By.ID,'header-id-1')
tag2 = driver.find_element('id','header-id-1')
上面俩行代码是等价的
5.获得元素后的操作
获得的tag是一个WebElement类,有text、tag_name等属性,click()等方法,具体用法自己进入源代码瞅一眼就有注释。 什么?有人不知道怎么查看源代码? 当然是,按住ctrl然后点击类名/函数名,就能看到了。
6.获取页面源码
html = driver.page_source
然后就可以了,接下来就是随便你怎么处理,你可以选择xpath或者bs4去解析他 刚好旁边就有xpath和bs4解析教程,真的不去看看吗?
7.设置启动选项options
在启动浏览器时,可以看到浏览器有“Chrome正在受自动化测试软件控制”的提示 还有一些其他的特征可以让网站知道我们使用了selenium 有时我们还想自定义访问网页的user-agent信息 这些功能的实现都是通过配置webdriver.Chrome
的Options
属性实现 注意在之前的旧版本中,webdriver.Chrome
除了有Options
参数还有ChromeOptions
参数,他们实现类似的功能但又不完全相同,在新版本中已经没有了 首先导入Options类
from selenium.webdriver.chrome.options import Options
使用时首先创建一个Options
对象,然后使用add_argument
函数向其中添加参数值,下面是其中一些参数
options = Options()
options.add_argument('lang=zh_CN.utf-8') # 设置默认编码为utf-8
options.add_argument('--no-sandbox') # 以最高权限运行
options.add_argument('--user-agent="xxxxx"') # 设置请求头的User-Agent
options.add_argument("--window-position=-2000,0") #设置窗口位置为负数,让用户看不到(另一种意义上的不弹出窗口)
options.add_argument('--window-size=1280x1024') #设置浏览器分辨率(窗口大小)
options.add_argument('--start-maximized') #最大化运行(全屏窗口),不设置,取元素会报错
options.add_argument('--incognito') #隐身模式(无痕模式)
options.add_argument('--hide-scrollbars') #隐藏滚动条, 应对一些特殊页面
options.add_argument('--disable-javascript') #禁用javascript
options.add_argument('--blink-settings=imagesEnabled=false') #不加载图片, 提升速度
options.add_argument('--headless') #浏览器不提供可视化页面
options.add_argument('--ignore-certificate-errors') #禁用扩展插件并实现窗口最大化
options.add_argument('--disable-gpu') #禁用谷歌浏览器GPU加速-配置1
options.add_argument('–disable-software-rasterizer') #禁用谷歌浏览器GPU加速-配置2
options.add_argument('--disable-extensions') #禁用扩展插件
options.add_argument("--proxy-server=http://" + ip_port) #HTTP代理
options.add_experimental_option('useAutomationExtension', False) #取消chrome受自动控制提示
options.add_experimental_option("excludeSwitches", ['enable-automation']) #正常浏览器window.navigator.webdriver的值为undefined,而使用selenium访问则该值为true,该方法规避这种风险。
8.使用ChromeService设置驱动地址
当你将驱动放在根目录下正常运行后可以不需要额外设置这个参数,但是如果你电脑始终报错:“找不到驱动” 或者你希望给这个项目单独配置驱动时,这个最新版中的类会帮助你完成需求 首先导入ChromeService
类
from selenium.webdriver import ChromeService #最新版,设置驱动地址
然后创建一个ChromeService
对象,并传入驱动地址
service = ChromeService(executabLe_path=r"D:\chromedriver.exe")
#在路径字符串前加`r`可以忽略路径中转义字符带来的干扰
然后将service传入webdriver.Chrome
的service
参数中即可
driver=webdriver.Chrome(service=service,options=options)
通用的selenium代码(个人复制用)
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver import ChromeService #最新版,设置驱动地址
from selenium.webdriver.chrome.options import Options
from time import sleep
service = ChromeService(executabLe_path=r"D:\APP\python\Tools\chromedriver.exe")
options = Options()
options.add_experimental_option('useAutomationExtension', False) #取消chrome受自动控制提示
options.add_experimental_option("excludeSwitches", ['enable-automation']) #正常浏览器window.navigator.webdriver的值为undefined,而使用selenium访问则该值为true,该方法规避这种风险。
#options.add_argument('--headless') #浏览器不提供可视化页面
#options.add_argument('--start-maximized') #最大化运行(全屏窗
#options.add_argument("--proxy-server=http://" + ip_port) # HTTP代理
driver=webdriver.Chrome(service=service,options=options)