驱动浏览器


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小节。

Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐