2 - Selenium - Selenium webdriver的基本操作
常用类与方法
from selenium import webdriver # 驱动浏览器 from selenium.webdriver import ActionChains # 鼠标的相关操作,比如滑动验证 from selenium.webdriver.common.by import By # 选择器,以什么方式选择标签元素 from selenium.webdriver.common.keys import Keys # 键盘相关 from selenium.webdriver.support import expected_conditions as EC # 各种判断,一般跟等待事件连用,比如说等待某个元素加载出来 from selenium.webdriver.support.wait import WebDriverWait # 等待事件,可以与EC连用 browser = webdriver.Chrome() wait = WebDriverWait(browser, 10) browser.get('https://www.baidu.com') browser.maximize_window() # 窗口最大化 print(browser.current_url) # 获取当前页URL print(browser.title) # 获取页面的title print(browser.name) # 获取driver对象:chrome print(browser.current_window_handle) # 获取当前窗口 print(browser.get_cookies()) # 获取cookies print(browser.page_source) # 获取当前页面内容 browser.refresh() # 刷新 browser.save_screenshot('error.png') # 保存截图 browser.close() # 关闭当前窗口 browser.quit() # 退出浏览器驱动,关闭所有关联窗口
# 测试 import time from selenium import webdriver driver = webdriver.Chrome() driver.get('https://www.baidu.com') # driver.find_element() # 定位标签 print(driver.title) # 网页标题 print(driver.page_source) # 获取页面内容 driver.set_window_size(800, 400) # 设置浏览器的宽和高 print(driver.get_window_size()) # 获取浏览器的宽和高 time.sleep(5) driver.close() # 关闭窗口 driver.quit() # 退出浏览器
选择器
from selenium import webdriver # 驱动浏览器 from selenium.webdriver.support.wait import WebDriverWait # 等待事件 browser = webdriver.Chrome() wait = WebDriverWait(browser, 10) browser.get('https://www.baidu.com') browser.find_element_by_id('su') # id选择器 browser.find_element_by_class_name('xx') # 类选择器,1个 browser.find_elements_by_class_name('xx') # 类选择器,多个 browser.find_element_by_link_text('xxx') # 链接文本选择器 browser.find_element_by_xpath('xxxx') # xpath选择器 browser.find_element_by_tag_name('h1') # 标签选择器,获取1个 browser.find_elements_by_tag_name('h1') # 标签选择器,获取多个 browser.find_element_by_css_selector('xxx') # 样式选择器
在选择器的选用时,要记得获取一个还是多个,要区分开find_elements
还是find_element
。这个s
容易忽略。
另外,上面的选择器,都可以写成下面的形式:
from selenium.webdriver.common.by import By # 选择器,以什么方式选择标签元素 browser.find_element(by=By.ID, value=None) # 选择器类型, value值
常用的选择器有:
By.ID
By.LINK_TEXT
By.CLASS_NAME
By.XPATH
By.CSS_SELECTOR
By.TAG_NAME
我们可以通过标签选择器来做:
import time from selenium import webdriver # 驱动浏览器 from selenium.webdriver import ActionChains # 鼠标的相关操作,比如滑动验证 from selenium.webdriver.common.by import By # 选择器,以什么方式选择标签元素 from selenium.webdriver.common.keys import Keys # 键盘相关 from selenium.webdriver.support import expected_conditions as EC # 各种判断,一般跟等待事件连用,比如说等待某个元素加载出来 from selenium.webdriver.support.wait import WebDriverWait # 等待事件 browser = webdriver.Chrome() wait = WebDriverWait(browser, 10) browser.get('https://www.baidu.com') input = browser.find_element_by_id('kw') # id选择器 input.send_keys('在干吗') # 如果获取到的是个input框,就可以往里面填值 time.sleep(1) input.clear() # 清空值 submit = browser.find_element(By.ID, 'su') submit.click() # 点击事件 # 有的时候,click事件可能会有问题,我们使用键盘事件来处理 submit.send_keys(Keys.ENTER) print(input.get_attribute('name')) # 获取name属性 print(input.text) # 获取内容,但这里的input没有text print(input.tag_name) print(input.get_property('name')) # 获取给定属性,用法类似get_attribute print(browser.find_element_by_class_name('mnav').text) # 找个有text的
当获取了标签对象后,我们可以获取这个标签的属性、内容、css样式和子标签(子标签也支持这些操作)
import time from selenium import webdriver driver = webdriver.Chrome() driver.implicitly_wait(10) try: driver.get('https://pythonav.com/login/') # 根据 class 属性获取 a 标签对象 a_obj = driver.find_element_by_class_name('navbar-brand') # 获取 a 标签的href属性 print(a_obj.get_attribute('href')) print(a_obj.text) # 获取标签的文本内容 print(a_obj.tag_name) # 获取标签的名称 # 获取 css 样式 print(a_obj.value_of_css_property('padding')) print(a_obj.value_of_css_property('font-size')) # 如果这个标签有 submit 属性,那么就可以点击它了,比如我们点击form表单中有submit属性的标签 driver.find_element_by_xpath('//*[@id="fm"]/div[5]/div/input').submit() # 获取该标签下的子标签,或者子标签元素 div_obj = driver.find_element_by_class_name('col-xs-3') print(div_obj.find_element_by_tag_name('input')) print(div_obj.find_element_by_tag_name('input').get_attribute('value')) # 获取验证码图片的大小 print(driver.find_element_by_id('image_code').size) # # 保存验证码图片 driver.find_element_by_id('image_code').screenshot('./a.png') except Exception as e: print(e) finally: time.sleep(10) driver.quit()
需要注意的是:按钮提交时,除了click之外,还有一个submit,区别是click就是单纯的点一下。而submit是完成了表单提交,需要携带表单信息进行提交的。如果是button按钮的话,只能使用click,而不能使用submit。
Keys
键盘事件有:
from selenium import webdriver from selenium.webdriver.common.keys import Keys # print(dir(Keys)) # print(Keys.__dict__)
示例
import time from selenium import webdriver from selenium.webdriver.common.keys import Keys driver = webdriver.Chrome() driver.get("https://www.baidu.com/") obj = driver.find_element_by_id("kw") # 找到输入框 obj.send_keys("流年中渲染了微信") time.sleep(3) obj.send_keys(Keys.ENTER) # 回车 time.sleep(4) driver.quit()