由于selenium更各版本用法不一,本文使用的环境是selenium4.13,python3.11.0,不同环境可能失效

忽略这一行

安装

pip install selenium

安装驱动

chrome浏览器

谷歌驱动官网下载地址 如果你的谷歌是最新版(在设置-关于Chrome查看版本),直接前往最新版下载地址 你还可以访问这个json文件查看113.+版本的所有驱动下载地址

Edge浏览器

首先把edge下载到最新,然后去这里安装那个稳定版就行

其他浏览器没用过就贴地址出来

放到python根目录下*(可选)

找到python安装目录然后把刚刚下载的.exe放下面就行,然后再设置一下环境变量

  1. 复制刚刚的python安装目录路径
  2. 打开设置-系统-高级系统设置-环境变量-用户变量-选中path项-编辑
  3. 看看有没有和刚刚复制的路径一样的,一般安装python时选择了自动添加就会有
  4. 如果没有就-新建-粘贴-完事

使用

第一次运行往往需要很长时间(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.ChromeOptions属性实现 注意在之前的旧版本中,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.Chromeservice参数中即可

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)