📅  最后修改于: 2023-12-03 15:22:44.678000             🧑  作者: Mango
如果你需要自动化测试,又需要获得精准的浏览器模拟效果,那么 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 无头脚本,介绍了一些常用方法和技巧。希望这些内容能够帮助你提高自动化测试的效率和准确度。