Selenium WebDriver是一个用于自动化Web应用程序测试的强大工具,它提供了一组API,允许开发人员以编程方式控制Web浏览器并模拟用户在浏览器中的操作。可以实现自动化测试、跨浏览器测试、自动化任务、集成测试。本文主要介绍Python中,使用Selenium WebDriver 方法,以及相关示例代码。

1、 安装Selenium

使用Selenium WebDriver需要先安装需要安装Selenium库,安装使用的pip在命令如下,

pip install selenium

2、安装浏览器驱动程序

Selenium WebDriver需要特定浏览器的驱动程序,使用的浏览器来下载相应的驱动程序,以便后续在代码中引用。

下载地址:

Chrome WebDriver

Firefox WebDriver

Edge WebDriver

Safari WebDriver

3、页面标题和内容

使用Selenium WebDriver的简单使用示例,实现获取指定url的标题和网页代码,如下,

from selenium import webdriver

# 初始化浏览器驱动程序,路径替换成上面地址下载的Chrome驱动程序路径
driver = webdriver.Chrome(executable_path='/path/to/chromedriver')
#driver = webdriver.Firefox(executable_path='/path/to/geckodriver')
#driver = webdriver.Edge(executable_path='/path/to/msedgedriver')
# Safari 浏览器需要菜单栏点击Safari 浏览器->偏好设置 ->高级 ->勾选-在菜单栏中显示“开发”菜单 中 
# 打开允许远程自动化
#driver = webdriver.Safari()

# 打开网页
driver.get('https://www.example.com')  # 替换为你要测试的网页地址

# 执行一些操作,例如查找元素、点击按钮、输入文本等
# 例如,查找页面中的元素并点击:
# element = driver.find_element_by_id('element_id')
# element.click()

# 等待一段时间,让页面加载完成
driver.implicitly_wait(10)  # 等待10秒,可以根据需要调整等待时间

# 获取页面标题和网页代码
page_title = driver.title
page_source = driver.page_source

# 打印页面标题和内容
print('Page Title:', page_title)
print('Page Source:', page_source)

# 关闭浏览器
driver.quit()

4、网页截图

使用Selenium WebDriver 获取指定网页截图,如下,

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

# 指定WebDriver驱动文件的路径
driver_path = '/path/to/chromedriver'  # 路径替换成上面地址下载的驱动程序路径

# 创建Chrome浏览器选项
chrome_options = Options()

# 添加浏览器参数
chrome_options.add_argument('--headless')  # 以无头模式运行浏览器(无界面)
chrome_options.add_argument('--disable-gpu')  # 禁用GPU加速,适用于Linux系统
chrome_options.add_argument('lang=zh-CN,zh,zh-TW,en-US,en')

# 创建一个带选项的Chrome浏览器实例,并指定驱动文件路径
driver = webdriver.Chrome(executable_path=driver_path, options=chrome_options)

# 打开网页
driver.get('https://www.baidu.com')

# 获取网页截图
driver.save_screenshot('screenshot.png')

# 关闭浏览器
driver.quit()

5、实现网页自动登陆

先找到指定登陆页面表单中的帐号、密码和登陆按钮,使用Selenium WebDriver 实现输入帐号和密码,点击登陆按钮登陆,如下,

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

# 指定WebDriver驱动文件的路径
driver_path = '/path/to/chromedriver'  # 替换为您的Chrome WebDriver路径

# 创建Chrome浏览器选项
chrome_options = Options()

# 添加浏览器参数
chrome_options.add_argument('--headless')  # 以无头模式运行浏览器(无界面)
chrome_options.add_argument('--disable-gpu')  # 禁用GPU加速,适用于Linux系统
chrome_options.add_argument('lang=zh-CN,zh,zh-TW,en-US,en')

# 创建一个带选项的Chrome浏览器实例,并指定驱动文件路径
driver = webdriver.Chrome(executable_path=driver_path, options=chrome_options)

# 打开网页
driver.get('https://example.com')  # 替换为您要登录的网站URL

# 查找用户名和密码输入框并输入信息
username_input = driver.find_element_by_id('username')  # 替换为用户名输入框的HTML元素ID
password_input = driver.find_element_by_id('password')  # 替换为密码输入框的HTML元素ID

username_input.send_keys('your_username')  # 替换为用户名
password_input.send_keys('your_password')  # 替换为密码

# 查找登录按钮并点击
login_button = driver.find_element_by_id('login_button')  # 替换为登录按钮的HTML元素ID
login_button.click()

# 登录成功后,可以执行其他操作,或者获取登录后的页面截图等

# 获取网页截图
driver.save_screenshot('loggedin.png')

# 关闭浏览器
driver.quit()

6、下载网页中图片

使用Selenium WebDriver,获取网页中img标签的src,图片的url,然后下载到本地,代码如下,

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

# 指定WebDriver驱动文件的路径
driver_path = '/path/to/chromedriver'  # 替换为您的Chrome WebDriver路径

# 创建Chrome浏览器选项
chrome_options = Options()

# 添加浏览器参数
chrome_options.add_argument('--headless')  # 以无头模式运行浏览器(无界面)
chrome_options.add_argument('--disable-gpu')  # 禁用GPU加速,适用于Linux系统
chrome_options.add_argument('lang=zh-CN,zh,zh-TW,en-US,en')

# 创建一个带选项的Chrome浏览器实例,并指定驱动文件路径
driver = webdriver.Chrome(executable_path=driver_path, options=chrome_options)

# 打开网页
driver.get('https://www.baidu.com')  # 替换为您要下载图片的网站URL

# 查找包含图片的HTML元素
image_elements = driver.find_elements_by_tag_name('img')

# 创建一个目录来保存下载的图片
os.makedirs('downloaded_images', exist_ok=True)

# 遍历所有图片元素并下载图片
for i, img in enumerate(image_elements):
    img_url = img.get_attribute('src')
    if img_url:
        response = requests.get(img_url)
        if response.status_code == 200:
            # 保存图片到指定目录
            with open(f'downloaded_images/image_{i}.jpg', 'wb') as f:
                f.write(response.content)

# 关闭浏览器
driver.quit()

推荐文档