Selenium进阶:动作链+窗口切换+元素等候
一. 窗口切换+内联框架01标签页切换
from selenium import webdriver
import time
browser=webdriver.Chrome()
browser.get("https://www.baidu.com/")
#windows.open传要打开页面的链接 会在新的标签页访问这个链接
browser.execute_script('window.open("https://www.douban.com/")')
time.sleep(2)
browser.execute_script('window.open("https://cn.bing.com/?mkt=zh-cn")')
time.sleep(2)
print(browser.title)#selenium当前标签页 默认指向get方法访问的页面
#获取所有标签页的窗口句柄
windows=browser.window_handles#返回列表
#利用窗口句柄切换标签页
for i in windows:
print(i)
browser.switch_to.window(i)
print(browser.title)
#百度 必应 豆瓣====倒序==1,4,3,2,
02表单切换
用Selenium动作
二. Selenium动作
01模拟输入与点击
[*] 使用send_keys()模拟输入
`send_keys()`方法是Selenium中用于向指定元素发送字符串输入的关键方法,通过此方法,可以模拟用户在文本框内输入笔墨的举动,实现自动化测试中的输入利用。
[*] 使用click()模拟点击
`click()`方法使Selenium能够模拟鼠标点击利用,对网页上的按钮、链接等可交互元素执行点击,是实现页面跳转和表单提交等用户举动的重要本领。
[*] 实例化欣赏器驱动
在Selenium中,起首需要实例化一个欣赏器驱动对象,如Chrome或Firefox,这是进行后续页面访问、元素定位及模拟利用的前提步调,确保自动化测试能在特定欣赏器环境下执行。
02动作链使用
"""
需求:拖动小方块 移动到大方块上面 看到页面弹窗
1.定位到小方块
2.按住小方块不松开
3.往右移 滑动x距离(到大方块上)
4.松开鼠标左键
"""
from selenium import webdriver
import time
from selenium.webdriver import ActionChains
browser=webdriver.Chrome()
browser.get('https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable')
#进入到iframeResult的页面
browser.switch_to.frame('iframeResult')#传内联框架元素的ID 若果没有可以元素定位到这个标签 然后传进去
#1.定位到小方块
element=browser.find_element_by_id('draggable')#seleninm默认只能拿到最外层的内容,里面拿不到
print(element)
#2.按住小方块不松开
action=ActionChains(browser)#实例化动作链传入驱动对象
action.click_and_hold(element)#点击长安指定标签
#3.往右移 滑动x距离(到大方块上)
action.move_by_offset(280,0)#左右移动 传参数x,y
action.release()
action.perform()#执行动作连中的动作 click_and_hold()-点击且长按指定标签
drag_and_drop()- 拖动
move_to_element() - 鼠标移动到某个元素
move_by_offset()- 鼠标从当前位置移动到某个坐标
release() - 在某个位置松开鼠标左键
perform()- 执行链中的所有动作
move_to_element_with_offset()
- 移动到距某个元素(左上角坐标)多少距离的位置
key_up() - 松开某个键
三. Selenium设置项
01无头模式
[*]无头模式是Selenium的一种设置,允许欣赏器在后台运行,不表现图形用户界面,实用于服务器环境或连续集成体系,无需实际表现器。
[*]通过实例化ChromeOptions对象,添加'--headless'参数,然后使用设置对象启动Chrome欣赏器,即可实现无头模式,使欣赏器在后台运行。
[*]无头模式节省了图形界面的开销,提高了测试效率,特别实用于需要大量自动化测试的服务器环境或连续集成体系。
[*] from selenium import webdriver
option= webdriver.ChromeOptions()# 实例化配置对象
option.add_argument('--headless')# 指定无头模式 无界面启动
browser = webdriver.Chrome(options =option)
browser.get('https://www.baidu.com/')
print(browser.title)
02防检测设置
(1)修改navigator.webdriver属性
[*]通过将navigator.webdriver属性设置为undefined或false,可以有用地避免网站通过检测此属性来辨认自动化脚本的访问,从而提高爬虫利用的隐蔽
(2)使用无界面模式
[*]无界面模式(headless mode)允许Selenium在不表现欣赏器界面的情况下运行,这减少了被网站检测到的大概性,同时提高了自动化测试或爬虫的效率和隐蔽性。
(3)更改用户代理设置
[*]通过更改用户代理(User-Agent)字符串,模拟不同的欣赏器和利用体系访问,可以有用避免因用户代理辨认而导致的自动化脚本检测,增加爬虫利用的乐成率。
[*] from selenium import webdriver
option= webdriver.ChromeOptions()# 实例化配置对象
#option.add_argument('--headless')# 指定无头模式 无界面启动
browser = webdriver.Chrome(options =option)
#防检测
#1.window.navigator.webdriver 为true代表检测到自动化这个代码是修改 window.navigator.webdriver为undefined可以改为false
browser.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument",
{"source": """ Object.defineProperty(navigator, 'webdriver', { get: () => undefined }) """})
#2.更换ip
option.add_argument('User-Agent={}'.format('Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.70 Safari/537.36'))
#3.更换ip
option.add_argument('--proxy-server=http://ip:port')
browser.get('https://www.baidu.com/')
print(browser.title)
#更多伪装可搜“selenium防检测配置项”
四. 元素等候
01为什么需要等候
[*]网页加载机制
网页在打开时,会按顺序加载HTML、CSS和JS文件。这一过程不但依赖文件的加载顺序,还大概受到网络波动的影响,导致元素加载延长。
[*]元素定位挑战
由于页面元素需要等候相干文件加载完成才气被准确定位,假如过早实验访问未完全加载的元素,大概会导致定位失败,进而影响后续利用。
[*]等候的必要性
设置元素等候可以确保在指定元素被加载出来之后再进行定位,如许可以避免因元素未加载完成而导致的定位失败,提高网页自动化测试的准确性和效率。
02等候方法
[*]强制等候
强制等候通过使用`time.sleep()`函数实现,此方法使程序停息执行指定的秒数,无论页面加载情况如何,都必须等候完整的时间才气继续。
[*]隐式等候
隐式等候通过一次设置`implicitly_wait()`函数实现,它为网页加载设定一个最长等候时间,假如在该时间内网页加载完成则立即继续,否则会不绝等到时间结束
[*]显式等候
显式等候使用`WebDriverWait`共同条件判定(`until`或`until_not`)进行元素定位,只有当元素出现或满足指定条件时才执行后续利用,若超时未满足条件则抛出异常。
03隐式等候设置
implicitly_wait() 假如在规定时间内网页加载完成,则执行下一步,否则不绝等到时间停止,然后执行下一步。抛出异常 隐式等候是全局性的 只需要设置一次 即运行过程中,假如元素可以定位到,它不会影响代码运行,但假如定位不到,则它会以轮询的方式不断地访问元素直到元素被找到,若凌驾指定时间,则抛出异常。
04显式等候设置
until(method, message=’ ‘)
method:指定预期条件的判定方法,在等候期间,每隔一段时间调用该方法,判定元素是否存在,直到元素出现
message: 假如超时,抛出 TimeoutException ,并表现 message 中的内容
until_not(method, message=’ ‘)
until_not 恰好相反,当元素消散或指定条件不成立,则继续执行后续代码
- 可以它当作是局部变量,作用于指定元素
- 就是直到元素出现才去利用,假如超时则报异常
- 表现等候需要使用 WebDriverWait,同时共同 until 或 not until
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]