当前位置: 首页 > news >正文

python爬虫之selenium库进阶(小白五分钟从入门到精通)

 驱动浏览器


selenium库支持的浏览器包括Chrome、IE 7~11、Firefox、Safari、Opera Edge、HtmlUnit、PhantomJS等,几乎覆盖了当前计算机端和手机端的所有类型的浏览器。在selenium库源代码文件下的webdriver中可查看所有支持的浏览器类型,如图15-31所示。
webdriver的使用形式如下:

webdriver.浏览器类型名()

浏览器类型名与图15-31中对应浏览器类型的文件夹名称相同。例如驱动Chrome浏览器的使用方法为webdriver.Chrome(),驱动Opera浏览器的使用方法为webdriver,opera()。图15-31所示的每个文件夹中都存在一个webdriver,py文件,当调用webdriver.Chrome()时,会默认调用chrome\webdriver.py文件中的类WebDriver。webdriver.Chrome()的使用形式如下:

webdriver.Chrome(executable path ="chromedriver",port = 0, options = None)

功能:创建一个新的Chrome浏览器驱动程序。
参数executable-path:表示浏览器的驱动路径,默认为环境变量中的path,通常计算机中可能存在多个浏览器软件,当没有在环境变量中设置浏览器path时,可以使用参数options。
参数port:表明希望服务运行的端口,如果保留为0,驱动程序将会找到一个空闲端口。参数options:表示由类Options(位于selenium\webdriver\chrome\options.py)创建的对象,用于实现浏览器的绑定。

示例代码(驱动Chrome浏览器):

from selenium import webdriverfrom selenium.webdriver,chrome.options import OptionsA03 chrome options = Options()04 chrome_options,binary_location = r"c:\Program filesGoogle\chrome\Application\chrome.exe"05 driver = webdriver.Chrome(options=chrome options)

第3、4行代码使用类Options创建了一个对象chrome_options,使用binary_location()方法绑定了浏览器。
第5行代码使用webdriver.Chrome()设置options参数值为绑定Chrome浏览器的对象chrome_options.
执行代码后将会自动打开Chrome浏览器,实现驱动浏览器的第一步。

注意该代码中的浏览器安装地址为笔者计算机上Chrome浏览器的安装地址,读者在实践操作时需要使用自己计算机中浏览器的安装地址。可以通过鼠标右键单击浏览器图标,选择快捷菜单中的“属性”选项即可打开“Google Chrome属性”对话框,在“快捷方式”选项卡下的“目标”中即可获取到Chrome浏览器的安装地址,如图15-32所示。

加载网页


使用类webdriver.Chrome创建的驱动浏览器对象中包含大量操作浏览器的方法,类webdriver.Chrome继承于基础类WebDriver,该类位于selenium库的webdriver\remote\webdriver.py文件中。类WebDriver的简洁定义:

class WebDriver(object):#覆盖当前文件检测器,文件检测器由方法Fi1e_detector创建
def name(self):...#返回浏览器的名称
def start_client(self):...#启动客户端
def stop_client(self):...#关闭客户端
def start session(self,capabilities,browser_profile=None):..
def create_web element(self,element_id):...#用指定的element_id创建一个web元素def execute(self,driver_command,params=None):...#执行JavaScript脚本程序def get(self,ur1):...#在当前浏览器会话中加载网页
def title(self):...4返回当前网页的标题
...通过链接文本获取网页中的一个元素
def find_elements_by_xpath(self,xpath):...通过xpath获取网页中的多个元素
下来介绍
def fnd_elements_by_link_textself,text):...#通过链接文本获取网页中的多个元素
def fnd element by link text(self,link text):
def find element by partial link text(self,link text):#通过元素链接文本的部分匹配来查找一个元素def fnd elements by partial link text(self,link text):#通过元素链接文本的部分匹配来查找多个元素
8et
商
1种,
第1
def find_element_by_name(self,name):...#通过标签name获取网页中的一个元素def find_elements_by_name(se1f,name):...#通过标签name获取网页中的多个元素def fnd_element_by_tag_name(self,name):...#通过标签名获取网页中的一个元素...#通过标签名获取网页中的多个元素def find elements by tag_name(self, name):def find_element_by_class_name(self,name):...#通过标签class获取网页中的一个元素def find_elements_by_class_name(self,name):...#通过标签class获取网页中的多个元素.#通过css选择器获取网页中的一个元素def find element by css selector(self,css selector):....#通过css选择器获取网页中的多个元素def find elements by css selector(self,css selector):def execute_script(self,script,*args):...#同步执行当前窗口/框架中的JavaScript脚本
功能:
示例代
se]
se]
chrome
chrome
driver
def execute_async_script(self,script,*args):...#异步执行当前窗口/框架中的Ja7aScript脚本
6 driver
def current_url(self):...#获取当前网页的urldefpage_source(self):...#获取当前网页的源代码
第6行
def quit(self):...#退出驱动程序并关闭所有相关的窗口def current_window_handle(self):...#返回当前窗口的句柄(浏览器中每个标签页为一个句柄)
数社官网自
def close(self):...#关闭当前窗口
hrome
def window_handles(self):...#返回当前会话中所有窗口的句柄
def maximize_window(self):...#最大化当前窗口
def fullscreen_window(self):...#调用特定于窗口管理器的“全屏”操作def minimize_window(self):...#调用特定于窗口管理器的“最小化”操作
def switch_to(self):...#返回一个包含所有可切换焦点的选项对象
def back(self):...#在浏览器历史中倒退了一页
def forward(self):..#在浏览器历史中前进了一页
def refresh(self):...#刷新当前页面
def get_cookies(self):...#返回一组字典,对应于当前会话中可见的Cookie
def get_cookie(self,name):...#按名称获取单个Cookie
def delete_cookie(self,name):...#删除指定名称的单个Cookie
def delete_a11_cookies(self):,,.#删除该会话范围内的所有Cookie
def add_cookie(self,cookie dict):...#将Cookie添加到当前会话中
def implicitly_wait(self,time_to_wait):...#设置超时以隐式等待找
def get_cookies(self):...#返回一组字典,对应于当前会话中可见的Cookie
def get_cookie(self,name):...#按名称获取单个Cookie
def delete_cookie(self,name):...#删除指定名称的单个Cookie
def delete_a11_cookies(self):,,.#删除该会话范围内的所有Cookie
def add_cookie(self,cookie dict):...#将Cookie添加到当前会话中
def implicitly_wait(self,time_to_wait):...#设置超时以隐式等待找到元素或完成命令
def set_script_timeout(self,time to wait):...#设置脚本等待时间
def set_page_load_timeout(self,time_to_wait):...#设置页面加载完成的时间
def find element(self,by=By.ID,value=None):...#查找一个元素
...#查找多个元素
def find elements(self,by=By.ID,value=None):def desired_capabilities(self):...#返回正在使用的驱动程序当前所需的功能def get_screenshot_as file(self,filename):...#将当前窗口的截图保存为.png格式图片def save_screenshot(self,filename):...#将当前窗口的截图保存为.png格式图片def get_screenshot_as_png(self):...#以二进制数据的形式获取当前窗口的截图def get screenshot as base64(self);...#获取当前窗口的截图
def set window size(self, width, height,windowHandle='current'):..#设置当前窗口的宽度和高度
def get_window_size(self,windowHandle='current'):...#获取当前窗口的宽度和高度
def set _window_position(self,x,y,windowHandle='current'):...#设置当前窗口的(x,y)坐标位置
def get_window_rect(self):...#获取窗口的(x,y)坐标位置和当前窗口的高度和宽度业口的(,以业标位置和高度、宽H04,日0经G股机与警察日的商相度设置当前窗口的(x,3)坐标位置和高度、*获取当前窗口的(,y)坐标位置def fle_detector(self, detector)!
第 15 章 网络爬虫
dforientation(se1f):-1#获取当前浏览易的,发送..#设置发送健盘输入数据时使用的文件检测器eforientation(caLrewe1re):设翼浏览器的方向2:@P1ICBELODLL2):61501扶取可用售设国一个与湖览热院用候存交五的pplcatoncaehe对集2f10g_types(se1f):#获取可用日志类型的另
derget1og(se1f,10g_tyPe):...#获得给定日志类型的日志

接下来介绍两种常用的加载浏览器网页的方法。
黎1种,get()方法。get()方法用于打开指定的网页。其使用形式如下

vet (url)

功能:在当前浏览器会话中加载url指向的网页。
示例代码(加载人民邮电出版社官网中的期刊页):

from selenium import webdriver
: from selenium.webdriver.chrome.options import optionsn;chrome_options = Options() chrome optionsbinary_location = r"c:\program Files\Google\chrome\Application\chrome,exe"6s driver = webdriver.Chrome(options=chrome_options)driver,get ('https://www.ptpress.com.cn//periodical')

第6行代码使用get()方法加载人民邮电出
版社官网的期刊页,执行代码后将会自动启动Chrome浏览器并加载出相应网页,结果如图15-33所示。
众民邮电出服社有限公司
第2种,execute_script()方法。executescript()方法用于打开多个标签页,即在同一浏览器中打开多个网页。其使用形式如下:

execute script(script,*args)

功能:打开标签页,同步执行当前页面中的JavaScript脚本。JavaScript是网页中的一种编程语言。参数script:表示将要执行的脚本内容,数据类型为字符串类型。使用JavaScript语言实现打开一个新标签页的使用形式为"window,open('网站ur1',’_blank');"。
示例代码(打开多个标签页):

import requests
import re
def get_Token(s):r0 = s.get('https://account.ryjiaoyu.com/log-in?ReturnUrl=https%3A%2F%2Fwww.ryjiaoyu.com%2Fuser')result = re.findall(r'__RequestVerificationToken(.+)value="(.+)" />', r0.text)return r0,result[0][1]
s = requests.Session()#创建会话对象
r0,Token =  get_Token(s)
data = {'__RequestVerificationToken':Token,'Email': '15156883862','Password': '123python','RememberMe': 'true'}
r1 = s.post('https://account.ryjiaoyu.com/log-in?returnUrl=https%3a%2f%2fwww.ryjiaoyu.com%2f',data=data)
r2 = s.get('https://www.ryjiaoyu.com/user')
f0 = open('登录前前的网页.html','w',encoding='utf-8')
f1 = open('登录前的网页.html','w',encoding='utf-8')
f2 = open('登录后的网页.html','w',encoding='utf-8')
f0.write(r0.text)
f1.write(r1.text)
f2.write(r2.text)
f0.close()
f1.close()
f2.close()

第7~9行代码使用execute_script()方法执行括号中的JavaScript脚本,打开的新标签页分别为人民邮电出版社登录页面、数艺设的主页、数艺设的课程页面,如图15-34所示。
更多操作浏览器的方法详见15.7.7小节。

http://www.dtcms.com/a/361917.html

相关文章:

  • 日语学习-日语知识点小记-构建基础-JLPT-N3阶段(23):文法+单词第7回5+考え方3
  • 为什么要使用RocketMQ半消息
  • 使用C#语言 基于FTP协议进行文件夹上传下载
  • 【Android】Span富文本简介
  • 苹果 Safari 地址栏可能被超大光标视觉欺骗
  • 阿里云OSS架构示意图与流程
  • AR眼镜在警务安防的应用方案
  • 前沿科技竞速:脑机接口、AI芯片与半导体生态上的新突破
  • 线性回归中梯度下降与正规方程以及拟合问题与正则化
  • 【职业】算法与数据结构专题
  • 【Flink】DataStream API (二)
  • 收藏!VSCode 开发者工具快捷键大全
  • 计算机毕设推荐:基于python的农产品价格数据分析与预测的可视化系统的设计与实现 基于Python农产品管理系统【源码+文档+调试】
  • 基于单片机汽车防盗系统/汽车安全防丢系统
  • 企业级主流日志系统架构对比ELKK Stack -Grafana Stack
  • 解决「图片导出功能需要 Chromium 浏览器支持,但未找到」的完整方案
  • Promise:异步编程的优雅解决方案
  • elemen ui Table表格中添加图片
  • qData 数据中台【开源版】发布 1.0.4 版本,全面升级数据清洗与资产管理能力
  • Spring Security(第六篇):结营篇 —— 完整源码与后续进阶路线 [特殊字符]
  • Day20 API
  • 什么是最大熵强化学习?
  • Go项目中关于优雅关闭的那些事
  • 动态配置最佳实践:Spring Boot 十种落地方式与回滚审计指南(含实操与避坑)
  • 如何将mysql数据导入人大金仓数据库
  • 漏洞挖掘 渗透测试思路图总结
  • 期货交易策略自动化实现
  • 数组基础及原理
  • 秋招冲刺计划(Day12)
  • Qwen-Image-Edit完全指南:实战20B参数模型的文字与语义-外观双重编辑