Python Web 爬虫中Selenium插件使用教程

selenium 加载带有插件的谷歌浏览器 option selenium 使用option加载带有插件的谷歌浏览器 阅读详情

Selenium主要用于Web应用中的自动化测试,是一种比较常用的自动化测试工具;

Selenium直接运行在浏览器之中,模拟用户对浏览器的相应操作。可以支持像IE, Firefox、safari,Opera或者Chrome等相关浏览器;

在WEB爬虫应用中,我们主要通过Selenium来模拟用户对网页的访问,进而实现用户信息获取。

 

我们以Chrome为例子:

1:Selenium安装和ChromeDriver的配置

1)Selenium安装,依赖pip安装工具, 主要通过

pip install Selenium 命令实现Selenium 的python依赖模块安装

2)chromeDriver主要根据不同的OS和当前OS上安装的不同的Chrome版本进行对应;

ChromeDriver对应下载地址: http://npm.taobao.org/mirrors/chromedriver/

根据自身的OS和Chrome 浏览器的版本下载对应的Driver即可;

3)配置, 将下载的chromeDrive解压, 将解压出来的文件,例如chromedriver.exe 放在对应的路径,让python程序获取得到即可。

 

2: Selenium插件的简单使用过程

1)浏览器见面可见运行方式

from selenium import werdriver

driver = webdriver.Chrome() 
driver.get('https://www.baidu.com')    #访问百度页面
driver.quit()

2)chrome无界面运行方式

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_opt = Options()   # chromedriver 运行参数设置
chrome_opt.add_argument('--headless')   # 无界面化.
chrome_opt.add_argument('--disable-gpu')    # 配合上面的无界面化.
chrome_opt.add_argument('--window-size=1366,768')

driver = webdriver.Chrome(chrome_options=chrome_opt)
driver.get('https://www.baidu.com') 
print(driver.page_source)
driver.quit()

Selenium常用启动配置项

更为详细的参数参见:https://peter.sh/experiments/chromium-command-line-switches/

其中 禁用图片加载的参数配置如下:

prefs = {
    'profile.default_content_setting_values' : {
        'images' : 2
    }
}
options.add_experimental_option('prefs',prefs)

禁用浏览器弹窗的参数如下:

prefs = {  
    'profile.default_content_setting_values' :  {  
        'notifications' : 2  
     }  
}  
options.add_experimental_option('prefs',prefs) 

 

另外,如果想通过制定driver的文件运行,代码如下:

from selenium import webdriver


driver = webdriver.Chrome(executable_path='chromedriver.exe')
driver.quit()

3: Selenium Driver的操作

Driver对象常见操作

get(url): 在当前浏览器会话中访问传入的url地址, driver.get('https://www.baidu.com')

close(): 关闭浏览器当前窗口

quit(): 退出webdriver并关闭所有窗口

refresh(): 刷新当前页面

title: 获取当前页的标题

page_source: 获取当前页渲染后的源代码

current_url: 获取当前页面的url

window_handles: 获取当前会话中所有窗口的句柄

 

Driver 查找单个元素

查找后返回一个Webelement对象

查找多个元素的话: 将其中的element加上s,则对应的多个的查找方法

上面的方法都是将第一个找到的元素进行返回,而将所有匹配的元素进行返回使用的是find_elements_by_*方法。

 

Driver操作Cookie

add_cookie(cookie_dict) : 给当前会话添加一个cookie。

cookie_dict: 一个字典对象,必须要有”name”和”value”两个键,可选的键有:“path”, “domain”, “secure”, “expiry”

用法:

driver.add_cookie({‘name’ : ‘foo’, ‘value’ : ‘bar’})
driver.add_cookie({‘name’ : ‘foo’, ‘value’ : ‘bar’, ‘path’ : ‘/’})
driver.add_cookie({‘name’ : ‘foo’, ‘value’ : ‘bar’, ‘path’ : ‘/’, ‘secure’:True})

get_cookie(name): 按name获取单个Cookie,没有则返回None

get_cookies(): 获取所有Cookie,返回的是一组字典

delete_all_cookies(): 删除所有Cookies

delete_cookie(name): 按name删除指定cooki

 

Driver获取截屏

get_screenshot_as_base64(): 获取当前窗口的截图保存为一个base64编码的字符串。
get_screenshot_as_file(filename): 获取当前窗口的截图保存为一个png格式的图片,filename参数为图片的保存地址,最后应该以.png结尾。如果出现IO错误,则返回False。
    用法: driver.get_screenshot_as_file(‘/Screenshots/foo.png’)
get_screenshot_as_png(): 获取当前窗口的截图保存为一个png格式的二进制字符串。

 

Driver获取窗口信息

get_window_position(windowHandle=’current’): 获取当前窗口的x,y坐标。

get_window_rect(): 获取当前窗口的x,y坐标和当前窗口的高度和宽度。

get_window_size(windowHandle=’current’): 获取当前窗口的高度和宽度。
 

Driver切换操作

  • switch_to_frame(frame_reference): 将焦点切换到指定的子框架中

  • switch_to_window(window_name): 切换窗口

 

Driver执行JS代码

execute_async_script(script, *args) : 在当前的window/frame中异步执行JS代码。

  • script:是你要执行的JS代码。
  • *args:是你的JS代码执行要传入的参数。
  • 用法:
script = “var callback = arguments[arguments.length - 1]; ”
script2 = “window.setTimeout(function(){ callback(‘timeout’) }, 3000);” 
driver.execute_async_script(script + script2)

execute_script(script, *args): 在当前的window/frame中同步执行JS代码。

  • script:是你要执行的JS代码。
  • *args:是你的JS代码执行要传入的参数。

 

4: Selenium Webelement操作

Webelement操作

前面有讲到使用find等方法来查找单个或多个元素对象, 其结果返回一个Webelement对象.

下面就是对这个对象的一些操作

常用方法:

clear(): 清空对象中的内容.
click(): 单击对象.
get_attribute(name): 优先返回完全匹配属性名的值,如果不存在,则返回属性名中包含name的值。
screenshot(filename): 获取当前元素的截图,保存为png,最好用绝对路径.
send_keys(value): 给对象元素输入数据, 如在百度中搜索’哔哩哔哩’.
submit(): 提交表单.
 

常用属性:

text: 获取当前元素的文本内容.
tag_name: 获取当前元素的标签名.
size: 获取当前元素的大小.
screenshot_as_png: 将当前元素截屏并保存为png格式的二进制数据.
screenshot_as_base64: 将当前元素截屏并保存为base64编码的字符串.
rect: 获取一个包含当前元素大小和位置的字典.
parent: 获取当前元素的父节点.
location: 当前元素的位置.
id: 当前元素的id值,主要用来selenium内部使用,可以用来判断两个元素是否是同一个元素.
 

Webelement中的keys

我们经常需要模拟键盘的输入,当输入普通的值时,在send_keys()方法中传入要输入的字符串就好了。

但是我们有时候会用到一些特殊的按键,这时候就需要用到我们的Keys类。

Demo:

from selenium.webdriver.common.keys import Keys


elem.send_keys(Keys.CONTROL, 'c')

更多模拟键值,参考如下:

 

5: Selenium 复杂交互操作

一般来说我们与页面的交互可以使用Webelement的方法来进行点击等操作。但是,有时候我们需要一些更复杂的动作,类似于拖动,双击,长按等等。

这时候就需要用到我们的Action Chains(动作链)了。

Demo:

from selenium.webdriver import ActionChains
from selenium import webdriver

driver = webdriver.Chrome()     # 创建webdriver对象.

element = driver.find_element_by_name("source")     # 查找单一元素对象.
target = driver.find_element_by_name("target")      # 同上.

actions = ActionChains(driver)      # 创建动作链对象.

# 在element元素上点击抓起,移动到target元素上松开放下。 类似鼠标.
actions.drag_and_drop(element, target)
actions.perform()   # 执行动作.

在导入动作链模块以后,需要声明一个动作链对象,在声明时将webdriver对象当作参数传入,并将对象赋值给一个actions变量。

然后我们通过这个actions变量,调用其内部附带的各种动作方法进行操作。

注:在调用各种动作方法后,这些方法并不会马上执行,而是会按你代码的顺序存储在ActionChains对象的队列中。当你调用perform()时,这些动作才会依次开始执行。
 

常用的Action-chains方法

click(on_element=None) : 左键单击传入的元素,如果不传入的话,点击鼠标当前位置。
context_click(on_element=None): 右键单击。
double_click(on_element=None) : 双击。
click_and_hold(on_element=None): 点击并抓起
drag_and_drop(source, target) : 在source元素上点击抓起,移动到target元素上松开放下。
drag_and_drop_by_offset(source, xoffset, yoffset):在source元素上点击抓起,移动到相对于source元素偏移xoffset和yoffset的坐标位置放下。
send_keys(*keys_to_send): 将键发送到当前聚焦的元素。
send_keys_to_element(element, *keys_to_send): 将键发送到指定的元素。
reset_actions(): 清除已经存储的动作。
 

6: Selenium Wait动作

在selenium操作浏览器的过程中,每一次请求url,selenium都会等待页面加载完毕以后,才会将操作权限再次交给我们的程序。

但是,由于ajax和各种JS代码的异步加载问题,所以我们在使用selenium的时候常常会遇到操作的元素还没有加载出来,就会引发报错。为了解决这个问题,Selenium提供了几种等待的方法,让我们可以等待元素加载完毕后,再进行操作。
显示等待Demo:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC


driver = webdriver.Chrome()
driver.get("http://somedomain/url_that_delays_loading")

try:
    # 创建wait对象.
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "myDynamicElement"))
    )

finally:
    driver.quit()

在这个例子中,我们在查找一个元素的时候,不再使用find_element_by_*这样的方式来查找元素,而是使用了WebDriverWait。

try代码块中的代码的意思是:在抛出元素不存在异常之前,最多等待10秒。在这10秒中,WebDriverWait会默认每500ms运行一次until之中的内容,而until中的EC.presence_of_element_located则是检查元素是否已经被加载,检查的元素则通过By.ID这样的方式来进行查找。

就是说,在10秒内,默认每0.5秒检查一次元素是否存在,存在则将元素赋值给element这个变量。如果超过10秒这个元素仍不存在,则抛出超时异常。
 

 

隐式等待

隐式等待指的是,在webdriver中进行find_element这一类查找操作时,如果找不到元素,则会默认的轮询等待一段时间。

这个值默认是0,可以通过以下方式进行设置:

from selenium import webdriver

driver = webdriver.Chrome()
driver.implicitly_wait(10) # 单位是秒
driver.get("http://somedomain/url_that_delays_loading")
myDynamicElement = driver.find_element_by_id("myDynamicElement")

 

7: Expected Conditions 方法

https://www.cnblogs.com/yuuwee/p/6635652.html

Selenium 如何使用代理 IP 进行 Web 爬虫(无认证实现、有账号密码认证实现) 本文介绍了 Selenium 使用无账号和有账号密码进行代理爬虫的方式,无账号密码主要基于浏览器 --proxy-server 参数实现,而有账号密码的方式基于 Selenium-Chrome-HTTP-Private-Proxy 插件实现;同时分享了一种免费获取代理IP的方式(一连代理),感兴趣的朋友可以试试。 阅读详情

相关推荐

Python爬虫实战:突破浏览器指纹反爬的Selenium伪装技术

在Web数据采集领域,反爬虫技术不断演进,其中浏览器指纹检测已成为识别自动化程序的核心手段。其原理是通过收集客户端环境的多维特征(如Canvas渲染、WebGL信息、插件列表等),生成近乎唯一的标识符进行风险判定。这项技术的价值在于为网站提供了更精准的流量识别与安全防护能力,广泛应用于金融、电商、社交等对数据安全要求较高的场景。应对此类反爬策略,关键在于系统性地伪装浏览器环境,消除自动化特征。本文聚焦于Selenium自动化工具,详细解析如何通过修改navigator.webdriver属性、注入CDP命令

weixin_32612263的博客 482

python+selenium操作谷歌浏览器安装谷歌插件无法找到最新版本chromedriver解决方案

我们在使用 Python 操作打开谷歌浏览器时,是需要安装对应版本的谷歌浏览器驱动,但是如果我们是最新版本的谷歌浏览器,在找不到对应的版本的谷歌浏览器驱动,这时候怎么解决呢?

weixin_47493863的博客 2003

使用slenium+chromedriver实现无敌爬虫

@概述 通常各大网站的后台都会有一定的反爬机制,既为了数据安全,也为了减小服务器压力 通常反爬的手段的方向,都是识别非浏览器客户端,而selenium所做的事情,恰恰是驱动真正的浏览器去执行请求和操作,只不过信号不是来源于鼠标,而是来源于selenium的API(selenium本是一个自动化的测试工具) 自然人用户能做的一切,selenium几乎都驱动浏览器取做,无论是否有界面,包括输入、点

欧阳桫的技术博客 2万+

Selenium操作常见控件实战

● 引入ActionChains包。● 定位要操作的元素。● 固定写法:ActionChains(driver).xxx(pars).perform()。

weixin_47631745的博客 1043

selenium 调用本地浏览器插件

seleniumwire --onefile 脚本。参考:https://github.com/wkeeling/selenium-wire/issues/402。seleniumwire 打包后报错找不到 ca.crt文件。在临时文件夹中找不到 seleniumwire ca.crt。2.安装ca.crt 证书至系统根目录。不安装证书的话,https访问会不正常。

拉灯的小手的博客 3312

python使用selenium浏览器插件

里面包含了谷歌、火狐和ie浏览器的驱动,使用时可以直接点击进去下载对应的版本即可。 既方便又好用,selenium教程直接使用的百度或者优快云上搜索《selenium 教程》,然后按照教程中的连接方式来使用selenium即可。

2020-12-25 Py web爬虫 实践selenium库(2)

selenium库的第一个实例 python 使用 selenium 爬虫知乎 解决了登入窗口无法自动关闭的问题 了解了web中元素位置的几种定位方式 安装chropath浏览器插件更好找到web中xpath

Lube的博客 135

自动化测试工具selenium相关插件

自动化测试工具selenium相关插件,selenium的环境搭建, 安装后下载selenium可进行使用

整理了上千个Python类库,简直太酷啦!

Python 生态,向来以各种类库齐全而闻名,这也是这门语言如此受欢迎的重要原因。今天萝卜哥就给大家分享一下这几天的战果,宵衣旰食,不眠不休的整理了近千个 Python 库,收藏的同时,给个在看不为过吧!文末可以获取完整思维导图高清版!数据处理文本处理chardet:字符编码检测器,该库可以检测文本、网页、xml等多种文件格式的编码difflib:文本差异比较ftfy:使...

公众号:Python研究者 811

《AFSim 2.9中文参考手册》

本栏目将对《AFSim 2.9中文参考手册》进行持续更新,欢迎关注交流!对本文或者AFSIM相关内容感兴趣的朋友,可私心联系作者。《AFSim 2.9中文参考手册》内容概览。

henggesim的博客 1万+

【ESD专题】从原理上分析TVS管PCB Layout的经验法则

我们常常会听到的一些经验法则,按这些经验法则去做,一般也不会有什么问题,但是到底是为什么呢? 没有从原理上分析和证明的时候,往往在Layout之后还要担心实际测试结果怎么样。或是在实际测试出问题后,根本无法进行分析,难道说修改一个版本就好了?那要从哪里修改呢?也无从下手呀。...

一点硬件 1447

Python+selenium使用cookie登录淘宝

众所周知,使用常规方法爬取淘宝的难度是很高的,所以使用selenium+浏览器几乎成了爬取淘宝最理想的方法。然而现在淘宝搜索需要用户登录才可以,据说是为了收集匹配用户信息。 而每次使用selenium时(+chrome),chromedriver会新打开一个浏览器窗口,所以添加cookie便显得很必要了。 这里看一下selenium的add_cookie方法 与普通的在headers里添加{'...

exmlyshy的博客 5876

OpenClaw界面操作手册:命令行与交互模式的正确打开方式

"test": {"description": "运行项目的测试套件","prompt": "请执行项目的测试命令,并分析测试结果。如果有失败的测试,请提供修复建议。},"lint": {"description": "运行代码检查","prompt": "请运行代码检查工具,分析所有警告和错误,并提供修复建议。},"doc": {"description": "为当前文件生成文档","prompt": "请为当前打开的文件生成完整的API文档,包括函数说明、参数描述、返回值类型和使用示例。

gaoxiang_120的专栏 3148

Selenium简介

什么是Selenium框架? Selenium是一个用于web应用程序测试的工具,目前是业内最核心的测试框架。直接运行在浏览器中,就像真正的用户在操作一样。而Appium是基于Selenium继承实现的,通过对页面元素的获取和调用实现自动化测试。 支持的浏览器包括IE、Firefox、Safari、Chrome、Opera等,覆盖的平台非常多。 适用于自动化测试,js动态爬虫(破解反爬虫)等领域。 Selenium发展史 Selenium本身是Firefox下的一个插件,Selenium IDE,主要用于火

Jane 3435

UG NX二次开发-博客文章速览

写了一些UG NX二次开发的心得体会,内容较多,感觉不好查找相应的内容,所以决心把导航写出来,方便自己也方便读者。主专栏是“”,C#专栏为 : “” ,Python专栏为 : “这三个专栏都会持续的更新。如果有需要咨询或者学习讨论的,请私信博主或者加QQ群:749492565。博主几乎每天都在。

GimiGimmy 3717

反应动力学仿真软件:Kintecus_(11).数据输入与输出解析

在反应动力学仿真软件的二次开发中,数据输入与输出解析是至关重要的步骤。正确地解析输入数据和生成输出结果不仅能够确保仿真过程的顺利进行,还可以提高仿真的准确性和效率。本节将详细介绍如何在仿真软件中实现数据输入与输出的解析,包括文件格式、数据结构、解析方法以及实际操作示例。

kkchenjj的博客 757

Python基础(7)- Selenium使用

欢迎关注天善智能hellobi.com,我们是专注于商业智能BI,大数据,数据分析领域的垂直社区,学习、问答、求职,一站式搞定!对商业智能BI、大数据分析挖掘、机器学习,python,R等数据领域感兴趣的同学加微信:tstoutiao,邀请你进入数据爱好者交流群,数据爱好者们都在这儿。以前搞Java的时候,知道Selenium是做自动化测试的,后来发现搞爬虫也会用到Sel...

简书博客搬家测试账号 154

PCL 计算点云AABB包围盒的体积【2026最新版】

AABB包围盒又称了 轴对齐包围盒,是点云包围盒里最简单的一种,其计算方法也极其简单。获取包围盒之后,根据包围盒的长宽高进行体积计算即可!博客长期更新,本文最近一次更新时间为:2026年5月3日。

点云侠的博客 2295

[Web自动化] Selenium设置相关执行文件路径

Selenium设置相关执行文件路径主要包括:1)设置浏览器驱动位置,可通过环境变量或代码中指定路径;2)设置浏览器程序位置,使用binary_location参数;3)设置用户数据目录,通过user-data-dir参数加载现有用户数据;4)带插件启动,使用add_extension方法加载crx插件。这些设置主要通过ChromeOptions对象实现,灵活控制浏览器启动时的各项参数配置。

知智 714

UG\NX二次开发 使用UF_CURVE_create_ocf_feature函数创建“在面上偏置”特征

使用UF_CURVE_create_ocf_feature函数创建“在面上偏置”特征。

王牌飞行员_里海的博客 850

【Windows Server 2019】DNS服务器的配置与管理——DNS正向解析

博文介绍了如何使用正向解析区,包括创建和添加并验证,以及术语 主机记录,别名,邮件交换记录的解释。

VMware, Windows, Linux, Cisco, Container, Kubernetes, Kali 1万+

学会这7个爬虫软件,三分钟搞定数据采集

它提供了自动网站解锁功能,能够应对动态加载、验证码、IP限制等各种反爬虫机制,而且支持如Puppeteer、Playwright和Selenium等多种爬虫工具,在亮数据内置的无界面浏览器上进行数据的采集,成功率非常高。不管是文本、图片、视频亦或表格,八爪鱼都能抓,而且它还提供了非常丰富的采集模板,比如电商、新闻、短视频等主流平台全包含,它已经帮你配置好了流程,一键可以实现爬虫。它的优势是基于Python生态,灵活性高,支持分布式爬虫和异步请求,而且有多种扩展,能满足复杂采集需求,适合做企业级爬虫部署。

分享Python、数据分析、人工智能前沿知识 2940

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

.interface文件怎么看啊_利用chrome_remote_interface实现程序化、自动化Web安全测试

如果要问有哪些抓包神器或者流量分析工具?以下几款工具是必须要提的,burpsuite(跨平台)、fiddler(windows下抓包神器)、wireshark(经典网络抓包工具)、justniffer(与前面几个使用代理获取流量不一样的是,justniffer是基于网卡获取流量)等。以上这几款工具之前我有单独成文介绍过,如有需要可点击蓝色链接移步。   那么如果问有哪些程序化的...

weixin_29531177的博客 359

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

我常用的6种爬虫软件,值得收藏~

既然提到了八爪鱼,就不得不提后羿,两者逻辑很像,都是可视化操作的爬虫工具,它在跨平台(支持 Mac/Windows/Linux)支持上做得不错,且免费功能的开放度在某些版本上比较良心。八爪鱼是无脑式的数据采集器,通过可视化的拖拉拽操作,实现对网页的数据采集,它的核心逻辑是模拟人的操作(点击、输入和滚动),你打开它的内置浏览器,鼠标点哪里,它就记录哪里。做跨境电商或海外数据抓取的朋友都知道,最痛苦的不是抓取,而是被封 IP或者无限验证码,亮数据就是专门用来处理这类场景的,它有几个比较使用的功能。

分享Python、数据分析、人工智能前沿知识 1459

爬虫代理标准版调用http代理方式

Selenium爬虫语言如何调用爬虫代理标准版 from selenium import webdriver import string import zipfile # 代理服务器 proxyHost = "t.16yun.cn" proxyPort = "31111" # 代理隧道验证信息 proxyUser = "username"...

Laicaling的博客 160
上一篇: Centos 下yum 安装golang
下一篇: kubectl命令系列(kubectl apply)
CodeAsWind
博客等级 码龄12年 40粉丝 126原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值