
Python+selenium用法详解
浏览器对象的正确使用避免将Python文件或包命名为
发布日期:2021-05-14 14:11:46
浏览次数:15
分类:精选文章
本文共 2479 字,大约阅读时间需要 8 分钟。
Selenium是一款强大的自动化测试工具,广泛应用于Web应用测试、浏览器自动化操作以及前端JS渲染内容抓取等场景。以下是Selenium的核心用法总结:
Selenium
或selenium
,因为这些名称可能与Selenium的导入语冲突。正确的做法是使用from selenium import webdriver
。初始化浏览器驱动(以Chrome为例):from selenium import webdriverbrowser = webdriver.Chrome()
- 访问页面并获取网页内容直接访问指定URL并获取页面渲染后的HTML内容:
- 元素查找方法对比
单个元素查找:
input_first = browser.find_element_by_id('q')input_second = browser.find_element_by_css_selector('#q')input_third = browser.find_element_by_xpath('/id="q"')
通用查找方法:
from selenium.webdriver.common.by import Byinput_first = browser.find_element(By.ID, 'q')
多个元素一次性查找:
inputs = browser.find_elements_by_id('q')
- 元素交互操作自动化操作比如输入搜索关键词并点击搜索按钮:
- 复杂动作与JavaScript执行
- 拖拽动作:
source = browser.find_element_by_css_selector('#draggable')target = browser.find_element_by_css_selector('#droppable')actions = ActionChains(browser)actions.drag_and_drop(source, target)actions.perform()
- 执行JavaScript:
browser.execute_script('window.scrollTo(0, document.body.scrollHeight)')
- 获取元素信息
- 元素属性获取:
logo = browser.find_element_by_id('zh-top-link-logo')print(logo.get_attribute('class'))
- 文本值获取:
input.text
- Frame操作在父框架中操作子框架或反之:
- 显式和隐式等待
显式等待(如元素存在并可见):
from selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECwait = WebDriverWait(browser, 10)input = wait.until(EC.presence_of_element_located((By.ID, 'q')))
隐式等待默认为0秒:
browser.implicitly_wait(10)
- 前进后退操作:
- Cookie管理:
- 窗口切换:
- 异常处理:
browser.get('https://www.taobao.com')print(browser.page_source)
注意:page_source
获取页面内容会包含JavaScript渲染后的完整HTML网页。
input.send_keys('iPhone')time.sleep(5) # 等待搜索框清空input.clear()input.send_keys('男士内裤')
按钮操作:
button = browser.find_element_by_class_name('btn-search')button.click()
browser.switch_to.frame('iframeResult')# 子框架操作browser.switch_to.parent_frame()
browser.back()browser.forward()
# 查看当前cookie:print(browser.get_cookies())# 添加或删除cookie:browser.add_cookie({'name': 'name', 'domain': 'www.zhihu.com', 'value': 'germey'})# 删除所有cookie:browser.delete_all_cookies()
from selenium import webdriver# 打开新窗口:browser.execute_script('window.open()')# �切换到新窗口:handles = browser.window_handlesbrowser.switch_to.window(handles[1])
from selenium.common.exceptions import TimeoutException, NoSuchElementExceptiontry: browser.get('https://www.baidu.com')except TimeoutException: print('请求超时')try: browser.find_element_by_id('hello')except NoSuchElementException: print('元素未找到')finally: browser.close()
以上方法覆盖了Selenium的核心功能使用场景,用户可以根据实际需求选择合适的实现方式。