Python控制浏览器——selenium模块

这篇具有很好参考价值的文章主要介绍了Python控制浏览器——selenium模块。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Python控制浏览器——selenium模块

准备工作

【1】安装selenium

pip install selenium

如果安装慢可以指定用国内源

pip install selenium -i https://mirrors.aliyun.com/pypi/simple/

【2】安装浏览器驱动

Chrome驱动地址:[http://chromedriver.storage.googleapis.com/index.html]

Edge驱动安装地址:[https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/?form=MA13LH]

Firefox驱动安装地址:[https://github.com/mozilla/geckodriver/releases]

安装成功后将插件放入python解释器根目录中

Python控制浏览器——selenium模块,Python自动化,python,selenium,开发语言,javascript,后端,html,测试工具

【3】测试驱动(作者是Edge)

from selenium import webdriver

browser = webdriver.Edge()
browser.get('https://www.baidu.com')
time.sleep(10)
# 如果不睡眠的话selenium会在运行完程序后自动关闭浏览器

Python控制浏览器——selenium模块,Python自动化,python,selenium,开发语言,javascript,后端,html,测试工具

注:如果出现浏览器打不开的情况可能需要检查驱动是否与自己浏览器版本相同

导航和操作窗口

导航

get(url)

作用:导航到指定的url

url = 'https://www.baidu.com/'
driver = webdriver.Edge()
driver.get(url=url)

返回

back()

作用:模拟浏览器的后退按钮,返回上一个访问的页面

driver = webdriver.Edge()
driver.back()

前进

forward()

作用:模拟点击浏览器的前进按钮,使浏览器前进到下一个访问过的页面(当使用了 back() 后)

driver = webdriver.Edge()
driver.forward()

刷新

refresh()

作用:刷新当前页面,重新加载页面内容

driver = webdriver.Edge()
driver.refresh()

最大化窗口

maximize_window()

作用:最大化浏览器窗口,使浏览器窗口占据整个屏幕空间

driver = webdriver.Edge()
driver.maximize_window()

切换选项卡

execute_script()

作用:在当前浏览器中打开一个新的选项卡

browser.execute_script('window.open()')

browser.window_handles

作用:获取所有选项卡句柄

switch_to.window

切换选项卡

# 获取所有选项卡的句柄列表
all_handles = browser.window_handles

# 切换到第二个选项卡(下标为1)
browser.switch_to.window(all_handles[1])

查找和操作元素

8种基本By定位方式

by 定位需要需要导入 By 类:from selenium.webdriver.common.by import By

[1]ID
  • 通过元素的 ID 属性进行定位
element = bro.find_element(By.ID, 'element_id')
  • 使用 find_element 方法,通过元素的 ID 属性进行定位。
  • 'element_id' 替换为你要查找的元素的实际 ID。
[2]Name
  • 通过元素的 Name 属性进行定位
element = bro.find_element(By.NAME, 'element_name')
  • 使用 find_element 方法,通过元素的 Name 属性进行定位。
  • 'element_name' 替换为你要查找的元素的实际 Name。
[3]Class
  • 通过元素的 Class 属性进行定位
element = bro.find_element(By.CLASS_NAME, 'element_class')
  • 使用 find_element 方法,通过元素的 Class 属性进行定位。
  • 'element_class' 替换为你要查找的元素的实际 Class。
[4]Tag 定位
  • 通过标签名进行定位
elements = bro.find_elements(By.TAG_NAME, 'div')
  • 使用 find_elements 方法,通过标签名进行定位。
  • 'div' 替换为你要查找的具体标签名,如 'a''span'
[5]Link 文字
  • 精确定位
element = bro.find_element(By.LINK_TEXT, 'link_text')
  • 使用 find_element 方法,通过链接文字进行精确定位。
  • 'link_text' 替换为你要查找的链接文字。
[6]Partial Link 文字
  • 模糊定位
element = bro.find_element(By.PARTIAL_LINK_TEXT, 'partial_link_text')
  • 使用 find_element 方法,通过链接文字进行模糊定位。
  • 'partial_link_text' 替换为你要查找的部分链接文字。
[7]XPath
  • XPath 表达式进行定位
element = bro.find_element(By.XPATH, 'xpath_expression')
  • 使用 find_element 方法,通过 XPath 表达式进行定位。
  • 'xpath_expression' 替换为你要使用的实际 XPath 表达式。
[8]CSS 选择器
element = bro.find_element(By.CSS_SELECTOR, 'css_selector')
  • 使用 find_element 方法,通过 CSS 选择器进行定位。
  • 'css_selector' 替换为你要使用的实际 CSS 选择器

元素交互

输入内容

作用:在name为’name’的input标签中输入123

name = driver.find_element(By.NAME, 'name')
name.send_keys("123")
清空文字
name = driver.find_element(By.NAME, 'name')
name.send_keys("123")
name.clear()
点击
element.click()
提交
element.submit()
内容

注:如果是表单内容则提取无效

element.text()
属性

注:获取元素的value值

element.get_attribute()
其他
element.id             #Selenium所使用的内部ID
element.get_property('background') #获取元素的属性的值
element.get_attribute('id') #获取元素的属性的值
element.location       #不滚动获取元素的坐标
element.location_once_scrolled_into_view  #不滚动且底部对齐并获取元素的坐标
element.parent         #父元素
element.send_keys('')  #向元素内输入值
element.size           #大小
element.screenshot('2.png') #截取元素形状并保存为图片
element.tag_name       #标签名
element.is_selected()  #判断元素是否被选中
element.is_enabled()   #判断元素是否可编辑
element.is_displayed   #判断元素是否显示
element.value_of_css_property('color') #获取元素属性的值
element._upload('2.png') #上传文件

常用的交互方法可以分为以下两块

从定位到的元素中获取数据
el.get_attribute(key)           # 获取key属性名对应的属性值
el.text                        	# 获取开闭标签之间的文本内容
对定位到的元素的操作
el.click()                      # 对元素执行点击操作
el.submit()                     # 对元素执行提交操作
el.clear()                      # 清空可输入元素中的数据
el.send_keys(data)              # 向可输入元素输入数据

模拟鼠标操作

以下操作均属于动作链

导入ActionChains类

from selenium.webdriver.common.action_chains import ActionChains

创建一个动作链对象

action = ActionChains(driver)
操作 函数
单击 click()
右击 context_click()
双击 double_click()
拖拽 double_and_drop()
悬停 move_to_element()
执行 perform()

示例:

# 找到需要单击的元素
name = driver.find_element(By.NAME, 'name')
# 对该元素单击
action.click(name).perform()

注:鼠标不要放在selenium浏览器中 否则会对操作产生影响

模拟键盘操作

引入Keys类

from selenium.webdriver.common.keys import Keys
操作 函数
删除键 send_keys(Keys.BACK_SPACE)
空格键 send_keys(Keys.SPACE)
制表键 send_keys(Keys.TAB)
回退键 send_keys(Keys.ESCAPE)
回车 send_keys(Keys.ENTER)
全选 send_keys(Keys.CONTRL,‘a’)
复制 send_keys(Keys.CONTRL,‘c’)
剪切 send_keys(Keys.CONTRL,‘x’)
粘贴 send_keys(Keys.CONTRL,‘x’)
键盘F1 send_keys(Keys.F1)

示例:

# 定位输入框
name = driver.find_element(By.NAME, 'name')
# 输入123
name.send_keys("123")
# 回车
name.send_keys(Keys.ENTER)

事件监听

# 鼠标左键单击
click(on_element=None) 

# 单击鼠标左键,不松开
click_and_hold(on_element=None) 

# 单击鼠标右键
context_click(on_element=None)  

# 双击鼠标左键
double_click(on_element=None)      

# 拖拽到某个元素然后松开
drag_and_drop(source,target)           

# 拖拽到某个坐标然后松开
drag_and_drop_by_offset(source,xoffset,yoffset) 

# 按下键盘上的某个键
key_down(value,element=None)   

# 松开键盘上的某个键
key_up(value, element=None)      

# 鼠标从当前位置移动到某个坐标
move_by_offset(xoffset, yoffset)  

# 鼠标移动到某个元素
move_to_element(to_element)        

# 移动到距某个元素(左上角坐标)多少距离的位置
move_to_element_with_offset(to_element, xoffset, yoffset) 

# 暂停所有输入(指定持续时间以秒为单位)
pause(seconds)        

# 执行所有操作
perform()                       

# 结束已经存在的操作并重置
reset_actions()         

# 在某个元素位置松开鼠标左键
release(on_element=None)       

# 发送某个键或者输入文本到当前焦点的元素
send_keys(*keys_to_send)       

# 发送某个键到指定元素
send_keys_to_element(element, *keys_to_send) 

示例:

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains

# 创建一个 Chrome WebDriver 实例
driver = webdriver.Chrome()

# 导航到网页
driver.get("http://www.example.com")

# 找到需要点击并按住的元素
element = driver.find_element_by_id("element_id")

# 创建一个动作链对象
action = ActionChains(driver)

# 执行鼠标点击并按住操作
action.click_and_hold(element).perform()

拖拽标签并移动

drag_and_drop(start, target)

作用:在start处元素按住鼠标并拖拽到target元素再松开

# 创建selenium对象
driver = webdriver.Edge()
# 打开网站
driver.get(url=url)
# 创建动作链对象
action = ActionChains(driver)
# 定义起始元素
drag = driver.find_element(By.ID, 'dragger')
# 定义目标元素
item_list = driver.find_elements(By.CLASS_NAME, 'item ')
# 拖拽
action.drag_and_drop(drag, item_list[0]).perform()

切换框架

driver.switch_to.frame 方法用于切换到指定的iframe或frame中

一般用于处理嵌套的框架(frameset)或内嵌框架(iframe)

# 通过name或id切换到指定的frame
driver.switch_to.frame("frame_name_or_id")

# 通过索引切换到指定的frame(索引从0开始)
driver.switch_to.frame(0)

# 如果需要切回默认的上下文(主文档),可以使用default_content()方法
driver.switch_to.default_content()

执行JS代码

执行js代码的方法:execute_script('js代码')

滚动到页面底部

browser.execute_script('window.scrollTo(0, document.body.scrollHeight)')

点击元素

element = browser.find_element(By.ID,'button_id')
browser.execute_script('arguments[0].click();', element)

输入文本

element = browser.find_element(By.ID,'input_id')
text = 'Hello, World!'
browser.execute_script('arguments[0].value = arguments[1];', element, text)

页面等待

强制等待

time.sleep(5)

显式等待

显式等待也称为智能等待,针对指定元素定位指定等待时间

在指定的时间内寻找元素,直至元素出现将其返回

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

from selenium import webdriver

url = 'https://www.doyo.com/'
driver = webdriver.Edge()
driver.get(url=url)
# 设置等待时间为10秒
wait = WebDriverWait(driver, 10)
# 等待元素出现
element = wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'Title3')))

print(element)

隐式等待

driver.implicitly_wait(10)    
# 在指定的n秒内每隔一段时间尝试定位元素,如果n秒结束还未被定位出来则报错

操作cookie

常用的操作cookie方法文章来源地址https://www.toymoban.com/news/detail-846813.html

# 获得cookie信息
get_cookies()

# 添加cookie
add_cookie(cookie_dict)

# 删除特定(部分)的cookie
delete_cookie(name)

# 删除所有的cookie
delete_all_cookies()

示例

from selenium import webdriver

# 启动浏览器
driver = webdriver.Chrome()

# 打开网页
driver.get("https://www.example.com")

# 添加cookie
cookie = {'name': 'example_cookie', 'value': '123456'}
driver.add_cookie(cookie)

# 获取当前页面所有cookie信息(列表)
cookie_list = driver.get_cookies()

# 删除所有cookie
driver.delete_all_cookies()

无头浏览器

  • 无头浏览器可以在后台运行,无需显示界面,适合自动化测试和爬虫等场景
  • 更快速、更稳定,因为不需要渲染页面
  • 消耗资源较少,适合在服务器环境中运行

Edge无头浏览器模式

from selenium import webdriver
# 在这里导入浏览器设置相关的类
from selenium.webdriver.edge.options import Options
 
# 无可视化界面设置 #
 
edge_options = Options()
# 使用无头模式
edge_options.add_argument('--headless')
# 禁用GPU,防止无头模式出现莫名的BUG
edge_options.add_argument('--disable-gpu')
 
# 将参数传给浏览器
browser = webdriver.Edge(options=edge_options)
 
# 启动浏览器
url = "https://baidu.com"
browser.get(url)
print(browser.title)
 
# 关闭浏览器
browser.quit()

到了这里,关于Python控制浏览器——selenium模块的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python selenium自动化操作Chrome浏览器

    ​ ​ 活动地址:CSDN21天学习挑战赛 Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持目前比较主流的浏览器。它也实现了诸多自动化功能,比如软件自动化测试,检测软件与浏览器兼容性,自动录制、生成不同语言

    2024年02月02日
    浏览(32)
  • Python爬虫(2)-Selenium控制浏览器

    Selenium中提供了不少的方法来操作浏览器 使用driver.get(‘网址’)的方式来打开浏览器 driver.refresh() 浏览器切换标签的方法就是, driver.current_window_handle 用selenium点击新打开了一个网页,需要告知selenium目前这个窗口是新的窗口,那么它才能早新的页面进行操作不然的话就无法操

    2024年02月08日
    浏览(32)
  • Python+Selenium4浏览器交互_web自动化(2)

    目录 0. 上节内容回顾 1 . 浏览器基本操作 1.1 启动 退出 1. 手动安装driver ,启动浏览器时,需要传递2个参数: 1.2 窗口设置 1.3 页面导航 1.4 获取页面信息 1.5 页面截图 2. 浏览器的高级操作 2.1 窗口切换 2.2 操作Cookies 2.3 执行JavaScript 今日内容:浏览器交互(调整窗口大小、导航

    2023年04月08日
    浏览(40)
  • python使用selenium控制浏览器进行爬虫

    这里以谷歌浏览器为例,需要安装一下chromedriver,其他浏览器也有相对应的driver,chromedriver下载地址:https://googlechromelabs.github.io/chrome-for-testing/ 然后是打开python环境安装一下依赖 pip install selenium ,验证一下控制浏览器是否成功 点击运行脚本可以看到以下页面就成功了。 爬虫

    2024年02月04日
    浏览(42)
  • selenium+python自动化测试之使用webdriver操作浏览器的方法

    WebDriver简介 selenium从2.0开始集成了webdriver的API,提供了更简单,更简洁的编程接口。selenium webdriver的目标是提供一个设计良好的面向对象的API,提供了更好的支持进行web-app测试。从这篇博客开始,将学习使用如何使用python调用webdriver框架对浏览器进行一系列的操作 打开浏览

    2024年01月25日
    浏览(43)
  • python通过selenium爬取网页信息,python获取浏览器请求内容,控制已经打开的浏览器

    背景:通过python中直接get或者urlopen打开一些有延迟加载数据的网页,会抓取不到部分信息。 1. 命令行打开chrome,并开启调试端口 (前提,找到chrome安装目录,找到chrome.exe所在路径,添加到环境变量中,例如我的是C:Program FilesGoogleChromeApplication) remote-debugging-port指定远程调试

    2024年02月16日
    浏览(55)
  • python-selenium控制浏览器多开窗口

    1、视频展示-多开5个百度页面 目录结构 只要在当前目录下放上自己所在的谷歌驱动器:谷歌驱动器如何下载,请参考博客:请点我 奉上代码

    2024年02月16日
    浏览(44)
  • Win10 python环境测试selenium加IE浏览器自动化-踩坑实录

    【背景】 需要访问某个旧网址,仅支持IE浏览器访问。为了实现自动化,被迫采用python加selenium、加IE浏览器来做。 【实录】 selenium采用IE浏览器方式的资料不多,网上可供参考范例不多。以下实时记录整个过程,实现调通一个基本访问实例。 【第一步】安装正确版本的sele

    2024年01月21日
    浏览(59)
  • selenium+python自动化测试 —— 解决无法启动IE浏览器及报错问题!

    前言:记录启动IE浏览器的报错及解决方法。 错误1: selenium.common.exceptions.WebDriverException: Message: \\\'IEDriverServer.exe\\\' executable needs to be in PATH. Please download from http://selenium-release.storage.googleapis.com/index.html and read up at https://github.com/SeleniumHQ/selenium/wiki/InternetExplorerDriver Exception ignored i

    2024年02月03日
    浏览(34)
  • 解决python+selenium自动化,打开谷哥浏览器窗口么会自动关闭问题

    # 导包 from selenium import webdriver from selenium.webdriver.common.by import By # 实例化浏览器,且浏览器对象的初始化放在定义的方法函数外,以全局变量的形式使用 wd = webdriver.Chrome() # 已配置环境变量 def get(): #

    2024年02月14日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包