安装Selenium和对应浏览器驱动WebDriver
指明WebDriver路径创建WebDriver对象,并控制浏览器打开与关闭
通过基本信息选择前端界面元素
通过CSS表达式选择元素
通过XPath路径选择元素
操作元素指令
等待时间
安装Selenium和对应浏览器驱动WebDriver
安装selenium:打开命令行(Win+R,cmd),输入如下命令
pip install selenium
安装WebDriver:点击此处安装对应版本Chrome浏览器驱动
指明WebDriver路径创建WebDriver对象,并控制浏览器打开与关闭
from selenium import webdriver
'''chromedriver.exe在你的电脑中的绝对路径'''
wd = webdriver.Chrome(service=Service(r'chromedriver.exe'))
如果已经将chromedriver.exe的绝对路径加入到环境变量Path中:
wd = webdriver.Chrome()
浏览器打开、关闭:
#打开浏览器并进入网址https://www.baidu.com
wd.get('https://www.baidu.com')
#关闭浏览器
wd.quit()
通过基本信息选择前端界面元素
在浏览器界面按F12即可进入开发者模式
点击开发者工具提供的选择元素图标
然后点击页面中的元素即可显示该元素的信息
我们可以通过id选取该元素,id一般唯一指定,不存在重复元素情况
from selenium.webdriver.common.by import By
'''find_element返回符合条件的第一个元素'''
elements = wd.find_element(By.ID, 'voiceSearchButton')
也可以通过class选择元素
''' find_element选择符合条件的第一个元素 '''
element = wd.find_element(By.CLASS_NAME, 'realbox-icon-button')
#找不到抛出异常
''' find_elements返回一个列表,包括符合条件的所有元素 '''
elements = wd.find_elements(By.CLASS_NAME, 'realbox-icon-button')
#找不到返回空列表
还可以根据tag名选择元素
#根据tag_name查找
elements = wd.find_elements(By.TAG_NAME, 'button')
通过CSS表达式选择元素
CSS表达式中,. 表示class名,如:.a 代表class为a;
# 表示id,如: #b 代表id为b;
若什么都不加表示tag名,如:button 代表tag名为button。
element1 element2 代表查找 element1 的后代元素中为 element2 的元素
element1 > element2 代表查找 element1 的子元素(下一代)中为 element2 的元素
'''id为a的元素后代中id为b的元素的子元素中tag名为button的元素'''
elements = wd.find_elements(By.CSS_SELECTOR,'#a #b > button')
通过XPath路径选择元素
通过浏览器F12中的选择元素工具选择元素后,对标灰信息的区域单击右键,选择copy,在拓展框中点击Copy XPath即可复制该元素的XPath路径
然后通过XPath路径选择界面元素
element = wd.find_element(By.XPATH, '//*[@id="voiceSearchButton"]')
操作元素指令
点击元素:
#先选择元素
element = wd.find_element(By.XPATH, '//*[@id="voiceSearchButton"]')
'''对元素进行点击'''
element.click()
操作输入框:
element = wd.find_element(By.ID, "input")
'''清除输入框已有的字符串'''
element.clear()
'''输入新字符串'''
element.send_keys('百度')
获取元素信息:
element = wd.find_element(By.XPATH,'xxxxxx')
'''获取元素的文本信息并打印'''
print(element.text)
'''获取元素属性并打印'''
print(element.get_attribute('class'))
print(element.get_attribute('id'))
'''获取全部HTML信息并打印'''
print(element.get_attribute('outerHTML'))
'''获取元素内部HTML信息并打印'''
print(element.get_attribute('innerHTML'))
'''获取输入框中的文本内容并打印'''
print(element.get_attribute('value'))
ActionChains 类:
Selenium 提供的 ActionChains 类有很多对web界面的操作
比如:鼠标移动、右键点击、双击、移动鼠标到某个元素、鼠标拖拽等。
from selenium.webdriver.common.action_chains import ActionChains
'''实例化一个ActionChains对象'''
ac = ActionChains(driver)
'''鼠标移动到元素上'''
ac.move_to_element(
driver.find_element(By.XPATH, 'xxxxx')
).perform()
其他操作可自行百度
等待时间
进行网页操作的时候,浏览器响应时间不可忽略,而程序执行非常迅速,可能会出现页面还没响应但程序已经执行的情况而发生找不到元素NoSuchElementException异常,所以需要有等待时间。
隐式等待:
Selenium提供了implicitly_wait方法 ,也就是隐式等待,implicitly_wait方法接受一个参数用来指定最大等待时长。
如果找不到元素,则会每隔0.5s再去界面上查看一次,直到找到该元素或者等待时间超过了最大等待时长。
'''一般将该语句写在开头,这样整个程序都会有隐式等待'''
wd.implicitly_wait(10)
强制等待:
使用time.sleep()强制等待,设置固定的休眠时间
import time
'''等待5秒'''
time.sleep(5)