📜  制作 selenium 无头 python (1)

📅  最后修改于: 2023-12-03 15:22:44.678000             🧑  作者: Mango

制作 Selenium 无头 Python

如果你需要自动化测试,又需要获得精准的浏览器模拟效果,那么 Selenium 无头模式就是你的选择。它是一种无界面、隐式运行浏览器的模式,特别适用于服务器端开发以及批量任务处理。在本篇文章中,我们将从头开始制作一个 Selenium 无头 Python 脚本,并介绍一些常用方法和技巧。

准备工作

首先要安装 Selenium 和 Chrome 驱动。Selenium 是一个 Python 库,你可以使用 pip 包管理器来安装。在终端中输入以下命令:

pip install selenium

然后下载 Chrome 驱动,注意要选择与你的 Chrome 浏览器版本相匹配的驱动。驱动下载地址是 https://sites.google.com/a/chromium.org/chromedriver/downloads 。将下载好的驱动解压后,将其路径添加进系统的环境变量中。

安装好库和驱动之后,我们就可以开始编写脚本了。

编写脚本
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

# 设置 Chrome 无头模式
chrome_options = Options()
chrome_options.add_argument('--headless')

# 指定 Chrome 驱动路径
driver_path = '/usr/local/bin/chromedriver'

# 创建一个 Chrome 浏览器实例
driver = webdriver.Chrome(executable_path=driver_path, chrome_options=chrome_options)

# 访问某个页面
driver.get('http://example.com')

# 获取页面标题
print(driver.title)

# 关闭浏览器
driver.quit()

上面这段脚本设置了 Chrome 为无头模式,创建了一个浏览器实例并访问了某个页面,然后获取了页面标题。最后关闭了浏览器。

常用方法和技巧
等待页面加载完成

由于网络或者网站本身的原因,页面的加载速度可能会很慢,或者跳转时也需要等待一段时间,这时我们就需要使用 Selenium 的等待方法。最常用的是 driver.implicitly_wait() 方法和 WebDriverWait() 方法。

# 隐式等待
driver.implicitly_wait(10)

# 显式等待
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "myElement"))
)

这两个方法的区别是:隐式等待是全局性的等待时间,只需设置一次即可;而显式等待是针对某个元素或某种条件的等待,可以根据需要设置多次。

模拟用户操作

在做自动化测试时,需要模拟用户的操作来测试页面的交互效果。例如点击、输入等操作,可以使用 driver.find_element_by_xxx() 方法来定位元素,然后使用 element.click()element.send_keys() 等方法进行模拟。

# 点击某个元素
element = driver.find_element_by_id('myElement')
element.click()

# 输入文本
element = driver.find_element_by_id('myElement')
element.send_keys('Hello, World!')
处理弹窗和框架

在页面中有时会出现弹窗或框架,需要对其进行处理。可以使用 driver.switch_to. 方法来处理。

# 切换到弹窗
alert = driver.switch_to.alert
alert.accept()

# 切换到框架
iframe = driver.find_element_by_tag_name('iframe')
driver.switch_to.frame(iframe)
截图和调试

最后介绍一些调试时常用的技巧。可以使用 driver.save_screenshot() 方法来截图,方便查看当前页面的情况。同时也可以在终端中添加 --remote-debugging-port 参数,来开启远程调试功能,这样就可以使用 Chrome 开发者工具来调试当前页面了。

结束语

在本篇文章中,我们学习了如何使用 Selenium 制作 Python 无头脚本,介绍了一些常用方法和技巧。希望这些内容能够帮助你提高自动化测试的效率和准确度。