因為用心,才會喜歡

粥雨

Selenium - 浏览器操作

Selenium - 浏览器操作


获取浏览器信息

from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
# 获取当前浏览器名称
print(driver.name)
# 获取当前网页的 URL 地址
print(driver.current_url)
# 获取当前网页的标题
print(driver.title)
# 获取当前网页的源代码
print(driver.page_source)

前进/后退/刷新

from selenium import webdriver
# 浏览器实例化
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
# 进行百度搜索
driver.find_element_by_xpath("//input[@id='kw']").send_keys("selenium")
driver.find_element_by_xpath("//input[@id='su']").click()
# 后退
driver.back()
# 前进
driver.forward()
# 刷新
driver.refresh()

窗口大小设置

from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
# 把浏览器窗口最大化
driver.maximize_window()
# 把浏览器窗口最小化
driver.minimize_window()
# 设置浏览器窗口大小,长、宽作为参数传递进去,单位:像素
driver.set_window_size(1366, 768)
# 获取浏览器大小
size = driver.get_window_size()
print(size)

窗口截图

  • 使用函数 get_screenshot_as_file()

    from selenium import webdriver
    driver = webdriver.Chrome()
    driver.get("http://www.baidu.com")
    # 保存为本地png图片
    # 图片后缀最好为.png,如果是其他的执行的时候会有警告,但不会报错
    driver.get_screenshot_as_file("D:\\baidu.png")

  • 使用函数 save_screenshot()

    from selenium import webdriver
    driver = webdriver.Chrome()
    driver.get("http://www.baidu.com")
    # 对当前浏览器打开界面进行截图
    driver.save_screenshot("D:\\baidu.png")

文件上传

参考教程:https://www.cnblogs.com/miki-peng/p/14529433.html

  • 上传有两种情况:
    • input标签:如果上传组件是一个 input 标签,那么定位到元素后,直接使用 send_keys() 方法就可以上传;
    • input标签:如果上传组 非input 标签,则需要借助第三方工具:第三方库 pywin32、第三方工具pyautogui

input标签

from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
# 定位上传文件元素
input_file = driver.find_element_by_id("xxx")
# 上传文件
input_file.send_keys(r"D:\learn\xx.txt")

非input标签

TODO:还未遇到这种场景,待学习


标签页切换

  • 在页面中点击某个链接之后,可能就会打开一个新的标签页,Chromedriver驱动是不会主动帮我们去切换。多标签页出现后,如果要做下一步操作,需要先切换浏览器标签页。

    # 获取全部窗口句柄
    handles = driver.window_handles
    # 获取当前窗口句柄
    handle = driver.current_window_handle
    # 通过句柄切换窗口
    driver.switch_to.window(handle)
    # 打开新的标签页
    js = 'window.open("https://www.baidu.com")'
    driver.execute_script(js)

  • 实战操作

    import time
    from selenium import webdriver
    # 启动Chromedriver,并与Chromedriver开启会话
    driver = webdriver.Chrome()
    driver.implicitly_wait(10)
    driver.get("http://www.baidu.com")
    # 点击新闻,新建一个tab标签页
    driver.find_element_by_xpath("//div[@id='s-top-left']/a[1]").click()
    time.sleep(2)
    # 获取当前标签页句柄
    win = driver.current_window_handle
    print('当前标签页:', win)
    # 获取当前所有标签页句柄
    # 返回的是一个列表,按照标签页打开的顺序
    wins = driver.window_handles
    print('所有标签页1:', wins)
    # 切换到第1个标签页
    driver.switch_to.window(wins[0])
    time.sleep(2)
    # 打开新的标签页
    js = 'window.open("https://www.baidu.com")'
    driver.execute_script(js)
    time.sleep(2)
    # 再次获取当前所有标签页句柄
    wins = driver.window_handles
    print('所有标签页2:', wins)
    # 关闭当前标签页
    driver.close()
    # 关闭浏览器,kill掉chromedriver进程
    driver.quit()

  • 封装窗口切换,实现切换到下一个窗口和上一个窗口的功能

    driver = webdriver.Chrome()
    def window_forward(driver):
    """自动切换到当前窗口的下一个窗口"""
    a = driver.window_handles
    b = driver.current_window_handle
    k = a.index(b)
    driver.switch_to.window(a[k+1])
    def window_back(driver):
    """自动切换到当前窗口的上一个窗口"""
    a = driver.window_handles
    b = driver.current_window_handle
    k = a.index(b)
    driver.switch_to.window(a[k - 1])

    小技巧: list.index(element) 用来获取元素在list中的索引位置,如果元素不存在会抛出异常。

posted @   粥雨  阅读(111)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
点击右上角即可分享
微信分享提示