python3 使用 Selenium 自动化测试或爬取数据

小木爱旅行 / 125 / 2023-09-26 11:37:28

ChatGPT 可用网址,仅供交流学习使用,如对您有所帮助,请收藏并推荐给需要的朋友。
https://ckai.xyz

第一步,先安装工具:
//默认在liunx环境运行,其他环境差不多,安装方式有点区别
1.下载 google-chrome-stable_current_x86_64.rpm 安装
google-chrome --version

2.下载 chromedriver_linux64.zip 安装
chromedriver --version

如果这样两个安装成功就可以下一步了。

第二步,启动模拟器
from pyvirtualdisplay import Display
display = Display(visible=0, size=(800, 800))
display.start()

第三步,创建Chrome WebDriver
driver = webdriver.Chrome()

注意,以上只在2步liunx下面才需要做的,win环境可以直接指定浏览器的驱动器也可以执行,
比如我的驱动位置
driver = webdriver.Chrome("C:\Program Files (x86)\Google\Chrome\App\chromedriver.exe")

第四步,尝试访问URL
driver.get(url)

第五步,增加等待时间为10秒,使用显式等待来增加等待时间,确保 Selenium 有足够的时间来查找或交互元素
wait = WebDriverWait(driver, 10)

现在就可以获取网页元素了,比如我想获取title
title = driver.title

或者想获取其中的某个ID
wait.until(EC.presence_of_element_located((By.ID, ID))

获取其中的元素
wait.until(EC.visibility_of_element_located((By.TAG_NAME, "h1")))
wait.until(EC.visibility_of_element_located((By.ID, "ID")))
wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "[class*='Text']")))

要注意presence_of_element_located和visibility_of_element_located的区别
1.presence_of_element_located:
这个条件用于等待页面上的元素出现在 DOM 结构中,但并不关心元素是否可见或是否被隐藏。
当使用这个条件时,Selenium 会等待直到页面上的元素在 DOM 中存在,即使元素不可见或被遮挡也会满足条件。
这个条件通常用于等待元素加载完成,但不需要考虑元素的可见性,例如等待一个页面加载的 spinner 消失。
2.visibility_of_element_located:
这个条件用于等待页面上的元素在 DOM 结构中存在并且可见。
当使用这个条件时,Selenium 会等待直到元素在 DOM 中存在并且满足 CSS 样式或布局上的条件,使得它对用户可见。
这个条件通常用于等待元素加载完成并且在页面上可见,例如等待一个按钮出现并且可以被用户点击。

如果想点击按钮可以这样操作
button = driver.find_element_by_id("myButton") # 替换为按钮的实际 ID
button.click()

执行其他测试操作
...

最后需要关闭浏览器
driver.quit()


python3 使用 Selenium 自动化测试或爬取数据
作者
小木爱旅行
许可协议
CC BY 4.0
发布于
2023-09-26
修改于
2024-07-14
Bonnie image
尚未登录