Selenium(二)对浏览器窗口的操作

Selenium可以通过WebDriver控制浏览器窗口的各种操作,包括:

打开浏览器窗口:

from selenium import webdriver
driver = webdriver.Chrome() # 打开Chrome浏览器窗口

获取浏览器大小:

# get_window_size() 返回的是字典
size = driver.get_window_size()
print(f"浏览器大小:{size}")

设置浏览器窗口的大小:

#driver.set_window_size(width, height) 
# 设置浏览器窗口的大小
driver.set_window_size(500, 500)

最大化浏览器:

driver.maximize_window()

 移动浏览器窗口到指定位置:

driver.set_window_position(x, y) # 移动浏览器窗口到指定位置

获取当前标签页的title:

print(f"标签页title:{driver.title}")

获取当前标签页的url:

print(f"标签页url:{driver.current_url}")

获取当前浏览器的名称(不常用):

print(f"标签页name:{driver.name}")

获取当前页面完整的HTML代码:

print(f"标签页page_source:{driver.page_source}")

前进、后退、刷新:

element = driver.find_element(By.TAG_NAME,"button")
element.click()
sleep(2)

# 后退
driver.back()
sleep(2)

# 前进
driver.forward()
sleep(2)

# 刷新
driver.refresh()
sleep(2)

执行js语句:

# 同步执行js
js='console.log(2)'
driver.execute_script(js)

sleep(2)

# 异步执行js
driver.execute_async_script("alert(2)")
sleep(2)

打开新的标签页:

js = 'window.open("https://www.baidu.com/")'
driver.execute_script(js)

获取当前标签页句柄:

print(f"当前标签页句柄:{driver.current_window_handle}")

获取浏览器所有标签页句柄:

handles = driver.window_handles
print(f"所有标签页句柄:{handles}")

切换标签页:

driver.switch_to.window(handles[0])

截图保存当前窗口:

import datetime

current_date = datetime.datetime.now().strftime('%m-%d-%H-%M-%S')
filename = f"file_{current_date}.png"    #文件名称为当前时间
driver.save_screenshot(filename)  # 截图保存当前窗口

关闭当前标签页:

driver.close()

浏览器窗口滚动页面:

from selenium import webdriver

from selenium.webdriver.common.by import By
from time import sleep

driver = webdriver.Chrome()

driver.get("https://www.baidu.com/")

#找到搜索框
select = driver.find_element(By.ID,"kw")
select.send_keys("selenium控制浏览器窗口滚动页面")

#点击搜索
select_click = driver.find_element(By.ID,"su")
select_click.click()

#隐式等待5秒
driver.implicitly_wait(5)

通过JS滚动页面:

"""
参数:	
x:沿 X 轴使用滚轮滚动的距离。负值向左滚动。
y:沿 Y 轴使用滚轮滚动的距离。负值向上滚动。
"""
driver.execute_script("window.scrollBy(0, 500);")  # 向下滚动页面500像素
print("向下滚动页面500像素")
sleep(2)

driver.execute_script("window.scrollBy(0, -500);")  # 向上滚动页面500像素
print("向上滚动页面500像素")
sleep(2)

driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")  # 滚动到页面底部
print("滚动到页面底部")
sleep(2)

driver.execute_script("window.scrollTo(0, 0);")  # 滚动到页面顶部
print("滚动到页面顶部")
sleep(2)

滚动到元素:

from selenium.webdriver.common.action_chains import ActionChains

action = ActionChains(driver)
element = driver.find_element(By.ID,"rs_new")

# 滚动到元素
"""
scroll_to_element(元素:selenium.webdriver.remote.webelement.WebElement )
如果元素在视口之外,则将元素底部滚动到视口底部。

参数:	
element:要滚动到视口中的元素。

"""
action.scroll_to_element(element).perform()
print("滚动到元素")
sleep(2)

按给定数量滚动: 

# 按给定数量滚动
"""
scroll_by_amount( delta_x: int , delta_y: int )
按提供的数量滚动,原点位于视口的左上角。

参数:	
delta_x:沿 X 轴使用滚轮滚动的距离。负值向左滚动。
delta_y:沿 Y 轴使用滚轮滚动的距离。负值向上滚动。

"""
action.scroll_by_amount(50, -200).perform()  # 向上滚动200像素向右滚动50
print("按给定数量滚动-向上滚动200像素向右滚动50")
sleep(2)

 从元素滚动给定的量:

# 从元素滚动给定的量
"""
scroll_from_origin( scroll_origin: selenium.webdriver.common.actions.wheel_input.ScrollOrigin , delta_x: int , delta_y: int )
根据提供的来源按提供的数量滚动。滚动原点是元素的中心或视口的左上角加上任何偏移量。如果原点是一个元素,并且该元素不在视口中,则该元素的底部将首先滚动到视口底部。

参数:	
origin:滚动起源的地方(视口或元素中心)加上提供的偏移量。
delta_x:沿 X 轴使用滚轮滚动的距离。负值向左滚动。
delta_y:沿 Y 轴使用滚轮滚动的距离。负值向上滚动。
提高:	如果具有偏移的原点在视口之外。-移动TargetOutOfBoundsException - 如果具有偏移的原点在视口之外。
"""
from selenium.webdriver.common.actions.wheel_input import ScrollOrigin

scroll_origin = ScrollOrigin.from_element(element)
action.scroll_from_origin(scroll_origin,-50,200).perform()  # 向下滚动200像素向左滚动50
print("从元素滚动给定的量-向下滚动200像素向左滚动50")
sleep(2)

 frame切换:

from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep

wb = webdriver.Chrome()
wb.get("https://cdn2.byhy.net/files/selenium/sample2.html")
wb.switch_to.frame("frame1")
elements = wb.find_elements(By.CLASS_NAME,"plant")

for element in elements:
    print(element.text)

sleep(2)
wb.quit()

frame切换回主HTML:

from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep

wb = webdriver.Chrome()
wb.get("https://cdn2.byhy.net/files/selenium/sample2.html")

wb.switch_to.frame("frame1")

elements = wb.find_elements(By.CLASS_NAME,"animal")

for element in elements:
    print(element.text)

#将 driver 控制权切换回最初的默认 frame 或窗口
wb.switch_to.default_content()
button = wb.find_element(By.ID,"outerbutton")
print(button.text)
button.click()

sleep(2)

你可能感兴趣的:(selenium,selenium,python)