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) # 移动浏览器窗口到指定位置
print(f"标签页title:{driver.title}")
print(f"标签页url:{driver.current_url}")
print(f"标签页name:{driver.name}")
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='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)
"""
参数:
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)
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()
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)