首页 > 其他分享 >63.Selenium框架

63.Selenium框架

时间:2024-08-01 10:42:50浏览次数:7  
标签:webdriver 框架 keys Selenium element 63 import find browser

Selenium框架

【一】浏览器操作

1)页面操作

1.初始化浏览器对象

# 使用环境变量
from selenium import webdriver

browser = webdriver.Chrome()
browser = webdriver.Chrome(path)
browser.close()	# 关闭浏览器

# 使用绝对路径
from selenium.webdriver.chrome.service import Service
from selenium import webdriver

service = Service(executable_path="./chromedriver.exe")
browser = webdriver.Chrome(service=service)
browser.get("https://www.jd.com")
browser.close()

2.访问页面

from selenium import webdriver

browser = webdriver.Chrome()
browser.get(r'https://www.baidu.com/')
browser.close()
类型 功能 代码
设置浏览器大小 设置分辨率 500*500 browser.set_window_size(500, 500)
设置浏览器大小:全屏 browser.maximize_window()
前进后退 后退 browser.back()
前进 browser.forward()
获取页面基础属性 网页标题 print(browser.title)
当前网址 print(browser.current_url)
浏览器名称 print(browser.name)
网页源码 print(browser.page_source)

3.切换选项卡

from selenium import webdriver
import time

# 创建 Chrome 浏览器的实例
browser = webdriver.Chrome()
# 打开百度网页
browser.get('https://www.baidu.com/')
# 隐式等待2秒,确保页面加载完全
browser.implicitly_wait(2)
# 打印当前窗口句柄
print(browser.window_handles)
# 在当前浏览器实例中新开一个选项卡
browser.execute_script('window.open()')
# 获取所有选项卡的句柄列表
all_handles = browser.window_handles
# 切换到第二个选项卡(下标为1)
browser.switch_to.window(all_handles[1])
# 在第二个选项卡中打开淘宝网页
browser.get('http://www.taobao.com')
# 等待2秒
time.sleep(2)
# 切换回第一个选项卡(下标为0)
browser.switch_to.window(all_handles[0])
# 在第一个选项卡中打开hao123网页
browser.get('http://www.hao123.com')
# 等待2秒
time.sleep(2)
# 关闭当前选项卡
browser.close()
# 关闭浏览器实例
browser.quit()

2)八大选择器

属性 函数
CLASS find_element(by=By.CLASS_NAME, value=‘’)
XPATH find_element(by=By.XPATH, value=‘’)
LINK_TEXT find_element(by=By.LINK_TEXT, value=‘’)
PARTIAL_LINK_TEXT find_element(by=By.PARTIAL_LINK_TEXT, value=‘’)
TAG find_element(by=By.TAG_NAME, value=‘’)
CSS find_element(by=By.CSS_SELECTOR, value=‘’)
ID find_element(by=By.ID, value=‘’)

【二】动作链

1)模拟鼠标操作

from selenium.webdriver.common.action_chains import ActionChains
操作 函数
右击 context_click()
双击 double_click()
拖拽 double_and_drop()
悬停 move_to_element()
执行 perform()

2)模拟键盘操作

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)

3)示例

from selenium.webdriver.common.keys import Keys
# 输出Python
c.find_element(By.ID,'kw').send_keys('python')
# 回车键
c.find_element(By.ID,'kw').send_keys(Keys.ENTER)
# 点击
c.find_element(By.ID,'kw').click()

【三】执行JS代码

1)滚动到页面底部

import time
from selenium import webdriver

# 初始化WebDriver
browser = webdriver.Chrome()

# 打开京东网页
browser.get('https://www.jd.com/')

# 使用JavaScript执行滚动到页面底部的操作
browser.execute_script('window.scrollTo(0, document.body.scrollHeight)')

# 等待3秒,以便页面加载完成
time.sleep(3)

2)点击元素

# 使用JavaScript点击一个按钮
element = browser.find_element(By.ID,'button_id')
browser.execute_script('arguments[0].click();', element)

3)输入文本

# 使用JavaScript输入文本到文本框
element = browser.find_element(By.ID,'input_id')
text = 'Hello, World!'
browser.execute_script('arguments[0].value = arguments[1];', element, text)

4)拖动元素

# 使用JavaScript拖动一个可拖动的元素到目标位置
source_element = browser.find_element(By.ID,'source_element_id')
target_element = browser.find_element(By.ID,'target_element_id')
browser.execute_script('''
    var source = arguments[0], target = arguments[1];
    var offsetX = target.getBoundingClientRect().left - source.getBoundingClientRect().left;
    var offsetY = target.getBoundingClientRect().top - source.getBoundingClientRect().top;
    var event = new MouseEvent('mousedown', { bubbles: true, cancelable: true, view: window });
    source.dispatchEvent(event);
    event = new MouseEvent('mousemove', { bubbles: true, cancelable: true, view: window, clientX: offsetX, clientY: offsetY });
    source.dispatchEvent(event);
    event = new MouseEvent('mouseup', { bubbles: true, cancelable: true, view: window });
    source.dispatchEvent(event);
''', source_element, target_element)

5)获取元素属性

# 使用JavaScript获取元素的属性值
element = browser.find_element(By.ID,'element_id')
attribute_value = browser.execute_script('return arguments[0].getAttribute("attribute_name");', element)
print(attribute_value)

【四】页面等待

1)强制等待

  • 也叫线程等待, 通过线程休眠的方式完成的等待

    import time
    time.sleep(n)      # 阻塞等待设定的秒数之后再继续往下执行
    

2)显式等待

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

  • 在指定时间范围内进行元素查找,找到元素则直接返回

  • 如果在超时还没有找到元素,则抛出异常

    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    # 设置WebDriver等待时间为最多10秒,每隔0.5秒检查一次
    #每隔 0.5s 检查一次(默认就是 0.5s)
    # 最多等待 10 秒,否则报错。
    #如果定位到元素则直接结束等待
    #如果在10秒结束之后仍未定位到元素则报错
    wait = WebDriverWait(chrome, 10, 0.5)
    
    # 等待页面中的元素"J_goodsList"出现
    wait.until(EC.presence_of_element_located((By.ID, 'J_goodsList'))
    

3)隐式等待

  • 隐式等待设置之后代码中的所有元素定位都会做隐式等待

  • 通过implicitly Wait完成的延时等待,注意这种是针对全局设置的等待

  • 如设置超时时间为10秒,使用了implicitlyWait后

  • 如果第一次没有找到元素,会在10秒之内不断循环去找元素

  • 如果超过10秒还没有找到,则抛出异常

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

【四】无头浏览器

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

# 创建 ChromeOptions 实例
chrome_options = Options()

# 配置 ChromeOptions 的参数

# 指定浏览器分辨率
chrome_options.add_argument('window-size=1920x3000')

# 规避 bug,需要加上这个属性
chrome_options.add_argument('--disable-gpu')

# 隐藏滚动条,应对特殊页面
chrome_options.add_argument('--hide-scrollbars')
chrome_options.add_argument('blink-settings=imagesEnabled=false')

# 不加载图片,提升速度
chrome_options.add_argument('--headless')

# 无头模式,不提供可视化页面。在 Linux 下,如果系统不支持可视化,不加这条会启动失败
# chrome_options.binary_location = r"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"

# 手动指定
# 创建 Chrome WebDriver 实例,并传入配置参数
driver = webdriver.Chrome(options=chrome_options)
driver.get('https://www.baidu.com')  # 打开百度首页

# 在页面源代码中查找关键词 'hao123' 并打印结果
print('hao123' in driver.page_source)
# True

driver.close()  # 关闭浏览器窗口,释放资源

标签:webdriver,框架,keys,Selenium,element,63,import,find,browser
From: https://www.cnblogs.com/Mist-/p/18336147

相关文章

  • 62.Xpath与Selenium
    【一】xpath1)介绍(XMLPathLanguage)一种小型的查询语言2)优点可在XML中查询支持HTML的查询通过元素和属性进行导航#安装pipinstalllxml#使用fromlxmlimportetree#将源码转化为能被XPath匹配的格式selector=etree.HTML(源码)#返回为一列表selector.xpat......
  • 微软GraphRAG框架源码解读(LLMs)
    1.引言这几天微软开源了一个新的基于知识图谱构建的检索增强生成(RAG)系统:GraphRAG。该框架旨在利用大型语言模型(LLMs)从非结构化文本中提取结构化数据,构建具有标签的知识图谱,以支持数据集问题生成、摘要问答等多种应用场景。GraphRAG的一大特色是利用图机器学习算法针对数据......
  • 1、消息队列框架:ActiveMQ - 开源项目研究文章
    ActiveMQ是Apache软件基金会下的一个开源消息队列服务,遵循JMS1.1规范(JavaMessageService),是一种面向消息中间件(MOM)的实现。它提供高可用性、出色的性能、可扩展性、稳定性和安全性的消息传递服务。ActiveMQ的架构ActiveMQ的架构包括生产者(Producer)、消费者......
  • 1、.Net UI框架:UWP - .Net宣传系列文章
    UWP(UniversalWindowsPlatform)是微软推出的一种应用程序开发平台,它允许开发者创建能够在各种Windows10设备上运行的应用程序,包括PC、平板、手机、Xbox、HoloLens等。UWP是Windows10操作系统的核心组件之一,它提供了统一的API和开发工具,使得开发者能够编写一次代码,然后在多个......
  • Python Selenium 单击 webdriverwait 与 find_element
    我无法理解这两个代码块之间的区别。发送点击在webdriverwait和find_elements中都有效。代码1fromseleniumimportwebdriverfromselenium.webdriver.common.byimportByfromselenium.webdriver.support.uiimportWebDriverWaitfromselenium.webdriver.suppo......
  • Selenium“没有提供‘moz:firefoxOptions.binary’功能,并且在命令行上没有设置二进制
    我一直在尝试将python脚本移植到我的wsl/bash编码中心中。我继续收到此错误:Traceback(mostrecentcalllast):File"/path/to/my/file.py",line20,in<module>driver=webdriver.Firefox(service=FirefoxService(GeckoDriverManager().install()))Fil......
  • 使用 Selenium 导出链接时出现 NoSuchDriverException 错误
    我想设置一个脚本来从输入URL后生成的网站导出链接。相关网站是pagespeed.web.dev。我的知识为零,所以虽然我知道这不是最好的选择,但我还是向ChatGPT寻求帮助。看起来只用1个URL就可以很好地完成所有事情,但一旦我尝试做5个URL,它就崩溃了。注意:据我了解,我不是数据抓取,......
  • 如何使用 Selenium (python) 访问另一个影子根中影子根中的元素?
    我有以下代码和HTML结构(我不是这方面的专家)。我正在尝试抓取HTML代码末尾的96.00C元素,其路径是:Xpath://*[@id="_grid"]/set-class2/div2/text-binding//text()完整Xpath:/html/body/main/div/div3/div3/......
  • 工作流流程引擎框架推荐来了
    近期有不少粉丝客户朋友都在询问工作流流程引擎框架推荐。随着行业竞争激烈化,实现流程化办公已经成为当务之急。低代码技术平台及工作流流程引擎拥有够灵活、更可靠、可视化界面等诸多个优势特点,在推动企业实现数字化转型的过程中深受行业信赖与喜爱。接下来就一起看看工作流流程......
  • 手写 Hibernate ORM 框架 05-基本效果测试
    手写Hibernate系列手写HibernateORM框架00-hibernate简介手写HibernateORM框架00-环境准备手写HibernateORM框架01-注解常量定义手写HibernateORM框架02-实体Bean定义,建表语句自动生成手写HibernateORM框架03-配置文件读取,数据库连接构建手写Hi......