1、安装Selenium和下载chromedriver
安装Selenium
pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple
下载chromedriver
浏览器:http://npm.taobao.org/mirrors/chromedriver/ 找到自己Chrome对应的版本下载即可
windows上
建议调用Chrome()
时指定chromedriver的路径,如果嫌麻烦可以放到以下任意一个位置都能正常打开Chrome浏览器:
- 方法1:任意位置,调用时指定chromedriver路径。如果与当前执行文件同级目录也可以不指定
- 方法2:当前项目虚拟环境的
venv/Scripts/
中,与python.exe同级目录中 - 方法3(不建议):系统上Python安装的位置,windows一般是:
C:\Users\Administrator\AppData\Local\Programs\Python\Python39
- 方法4(不建议):系统上Chrome安装位置,windows一般是:
C:\Users\Administrator\AppData\Local\Google\Chrome\Application
2、访问百度的Demo
操作步骤为:加载驱动–》访问链接–》页面操作–》关闭浏览器
import time
from selenium import webdriver
# 定位器
from selenium.webdriver.common.by import By
# 获取驱动
driver = webdriver.Chrome("/Users/chenbinhao/Downloads/chromedriver")
# 访问百度
driver.get("http://www.baidu.com")
# 获取搜索框元素
inputElement = driver.find_element(By.ID, "kw")
# 发送搜索内容到搜索框
inputElement.send_keys("selenium")
# 获取搜索按钮
searchElement = driver.find_element(By.ID, "su")
# 点击搜索
searchElement.click()
# 休眠5s
time.sleep(5)
# 退出浏览器
driver.quit()
3、八种定位器
两种查找元素的方法:find_element(by=By.ID, value=None) -> WebElement
find_elements(by=By.ID, value=None) -> List[WebElement]
参数说明:
by=By.ID
定位策略,总共八种,分别是:
-
By.ID
通过元素的ID -
By.CLASS_NAME
通过元素的class -
By.NAME
通过元素的name -
By.TAG_NAME
通过元素的标签 -
By.LINK_TEXT
通过超链接文本 -
By.PARTIAL_LINK_TEXT
通过超链接文本(模糊查询) -
By.XPATH
通过xpath(万能) -
By.CSS_SELECTOR
通过css选择器(万能)
-
value=None
要定位的元素
两种方法的区别:
- find_element() 返回第一个匹配到的元素,如果没找到则会报错
- find_elements() 返回匹配到的所有元素,如果没找到则会返回空列表
通过一个案例演示下所有的,首先新建一个测试html到本地:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>zzzxydq测试笔记</title>
</head>
<body>
<a>用户名:</a>
<input id="username" class="username">
<a>密码</a>
<input id="password" name="password">
<button class="login">登录</button>
<br>
<p>测试啦</p>
<p>再一次测试啦</p>
<br>
<a href="https://voice.baidu.com/act/newpneumonia/newpneumonia/?from=osari_pc_1" target="_blank" id="virus-202s0"
class="mnav sp dot">终极抗击肺炎啊</a>
<a href="https://voice.baidu.com/act/newpneumonia/newpneumonia/?from=osari_pc_1" target="_blank" id="virus-2020"
class="mnav sp dot">抗击肺炎</a>
<div>
<ul>
<li class="li">111</li>
<li class="li">222</li>
<li class="li">333</li>
</ul>
<ul>
<li>aaa</li>
<li>bbb</li>
<li>ccc</li>
</ul>
</div>
</body>
</html>
方式一:通过元素id
一般,id值是唯一的,属于一个元素
# 找到id=username的元素
username = driver.find_element(By.ID, "username")
# 输入 张三
username.send_keys("张三")
# 找到id=password的元素
password = driver.find_element(By.ID, "password")
# 输入 123
password.send_keys("123")
方式二:通过元素class
一般,可以多个元素共用一个class
# 通过元素class查找(仅返回匹配到的第一个)
login_btn = driver.find_element(By.CLASS_NAME, "login")
# 点击
login_btn.click()
# 找到class=li的所有元素
lis = driver.find_elements(By.CLASS_NAME, "li")
for li in lis:
# 打印元素的内容
print(li.text)
### 执行结果
111
222
333
方式三:通过元素name
同样,一般可以多个元素共用一个name
# 找到一个name=password的元素
password = driver.find_element_by_name("password")
# 输入 123
password.send_keys("123")
方式四:通过元素标签
# 找到一个标签为p的元素
p = driver.find_element(By.TAG_NAME, "p")
print(p.text)
# 执行结果为:
测试啦
# 找到所有标签为p的元素
ps = driver.find_elements(By.TAG_NAME, "p")
for p in ps:
print(p.text)
# 执行结果为:
测试啦
再一次测试啦
方式五:通过超链接文本
# 找一个一个超链接,它的文本内容为"抗击肺炎"
atexts = driver.find_elements(By.LINK_TEXT, "抗击肺炎")
for atext in atexts:
print(atext.text)
# 执行结果
抗击肺炎
方式六:通过超链接文本(模糊查询)
atexts = driver.find_elements(By.PARTIAL_LINK_TEXT, "抗击肺炎")
for atext in atexts:
print(atext.text)
# 执行结果为:
终极抗击肺炎啊
抗击肺炎
方式七:通过xpath
# 通过xpath
li = driver.find_element(By.XPATH, "/html/body/div/ul[1]/li[2]")
print(li.text)
# 执行结果:
222
方式八:通过css选择器
# 通过css选择器
li = driver.find_element(By.CSS_SELECTOR, "body > div > ul > li:nth-child(2)")
print(li.text)
### 执行结果:
222
参考文章: