首页 > 编程语言 >python爬虫使用selenium

python爬虫使用selenium

时间:2024-04-17 13:12:15浏览次数:24  
标签:webdriver python selenium argument 爬虫 -- add options

由于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)

标签:webdriver,python,selenium,argument,爬虫,--,add,options
From: https://www.cnblogs.com/kabaiye/p/18140374

相关文章

  • gevent实现协程爬虫
    这里只供基础的爬虫需求,协程是什么和gevent进阶用法就不赘述了下载pipinstallgevent基本流程1.打补丁打补丁的意思是使用gevent的monkey类将python的一些标准库函数的阻塞调用都改成协作式的,这部分不懂可以不用管,在你的代码上固定下面两行就好。fromgeventimportmonke......
  • Python-GPU-编程实用指南(一)
    PythonGPU编程实用指南(一)原文:zh.annas-archive.org/md5/ef7eb3c148e0cfdfe01c331f2f01557c译者:飞龙协议:CCBY-NC-SA4.0前言问候和祝福!本文是关于使用Python和CUDA进行GPU编程的入门指南。GPU可能代表图形编程单元,但我们应该明确,这本书不是关于图形编程——它本质......
  • Python-GPU-编程实用指南(三)
    PythonGPU编程实用指南(三)原文:zh.annas-archive.org/md5/ef7eb3c148e0cfdfe01c331f2f01557c译者:飞龙协议:CCBY-NC-SA4.0第十章:使用已编译的GPU代码在本书的过程中,我们通常依赖PyCUDA库自动为我们接口我们的内联CUDA-C代码,使用即时编译和与Python代码的链接。然而......
  • Python-物联网项目(一)
    Python物联网项目(一)原文:zh.annas-archive.org/md5/34135f16ce1c2c69e5f81139e996b460译者:飞龙协议:CCBY-NC-SA4.0前言物联网承诺解锁真实世界,就像互联网几十年前解锁了数百万台计算机一样。树莓派计算机于2012年首次发布,迅速风靡全球。最初设计的目的是给新一代带来与......
  • Python-物联网项目(五)
    Python物联网项目(五)原文:zh.annas-archive.org/md5/34135f16ce1c2c69e5f81139e996b460译者:飞龙协议:CCBY-NC-SA4.0第十九章:评估第一章第一款树莓派是在哪一年推出的?A.2012树莓派3ModelB+相对于上一个版本有哪些升级?A.处理器升级到1.4GHz,支持5GHz无线局......
  • Python-物联网项目(四)
    Python物联网项目(四)原文:zh.annas-archive.org/md5/34135f16ce1c2c69e5f81139e996b460译者:飞龙协议:CCBY-NC-SA4.0第十四章:使用Python控制机器人小车在第十三章中,介绍树莓派机器人小车,我们建造了T.A.R.A.S机器人小车。在章节结束时,我们讨论了如何通过代码控制T.A.R.A......
  • Python-物联网项目(三)
    Python物联网项目(三)原文:zh.annas-archive.org/md5/34135f16ce1c2c69e5f81139e996b460译者:飞龙协议:CCBY-NC-SA4.0第十章:发布到Web服务在物联网的核心是允许与物理设备交互的Web服务。在本章中,我们将探讨使用Web服务来显示来自树莓派的传感器数据的用途。我们还将研......
  • Python-物联网项目(二)
    Python物联网项目(二)原文:zh.annas-archive.org/md5/34135f16ce1c2c69e5f81139e996b460译者:飞龙协议:CCBY-NC-SA4.0第六章:使用伺服控制代码控制模拟设备继续我们的旅程,将模拟仪表的优雅与数字数据的准确性相结合,我们将看看我们在前两章中学到的内容,并构建一个带有模拟仪表......
  • Python-企业自动化实用指南(四)
    Python企业自动化实用指南(四)原文:zh.annas-archive.org/md5/0bfb2f4dbc80a06d99550674abb53d0d译者:飞龙协议:CCBY-NC-SA4.0第十八章:使用Python构建网络扫描器在本章中,我们将构建一个网络扫描器,它可以识别网络上的活动主机,并且我们还将扩展它以包括猜测每个主机上正在运......
  • python抽帧及生成高质量的GIF图
    python抽帧及生成高质量的GIF图对视频进行抽帧只需要两个模块即可:opencv-python(cv2)opencv-contrib-python我们都知道视频有分辨率,即视频的宽度与高度,还有视频的帧速率,即每秒有多少帧。对视频进行抽帧,有两种方式,一种是每秒抽取一帧,另一种是每秒所有帧的抽取。 importos......