安装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即可进入开发者模式

python selenium项目 python selenium教程_python selenium项目

 点击开发者工具提供的选择元素图标

python selenium项目 python selenium教程_python selenium项目_02

然后点击页面中的元素即可显示该元素的信息

python selenium项目 python selenium教程_自动化_03

 我们可以通过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路径

python selenium项目 python selenium教程_python selenium项目_04

然后通过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)