pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple
浏览器:http://npm.taobao.org/mirrors/chromedriver/
找到自己Chrome对应的版本下载即可
建议调用Chrome()
时指定chromedriver的路径,如果嫌麻烦可以放到以下任意一个位置都能正常打开Chrome浏览器:
venv/Scripts/
中,与python.exe同级目录中C:\Users\Administrator\AppData\Local\Programs\Python\Python39
C:\Users\Administrator\AppData\Local\Google\Chrome\Application
操作步骤为:加载驱动–》访问链接–》页面操作–》关闭浏览器
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()
两种查找元素的方法:find_element(by=By.ID, value=None) -> WebElement
find_elements(by=By.ID, value=None) -> List[WebElement]
参数说明:
by=By.ID
定位策略,总共八种,分别是:
By.ID
通过元素的IDBy.CLASS_NAME
通过元素的classBy.NAME
通过元素的nameBy.TAG_NAME
通过元素的标签By.LINK_TEXT
通过超链接文本By.PARTIAL_LINK_TEXT
通过超链接文本(模糊查询)By.XPATH
通过xpath(万能)By.CSS_SELECTOR
通过css选择器(万能)value=None
要定位的元素两种方法的区别:
通过一个案例演示下所有的,首先新建一个测试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">111li>
<li class="li">222li>
<li class="li">333li>
ul>
<ul>
<li>aaali>
<li>bbbli>
<li>cccli>
ul>
div>
body>
html>
一般,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查找(仅返回匹配到的第一个)
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=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
li = driver.find_element(By.XPATH, "/html/body/div/ul[1]/li[2]")
print(li.text)
# 执行结果:
222
# 通过css选择器
li = driver.find_element(By.CSS_SELECTOR, "body > div > ul > li:nth-child(2)")
print(li.text)
### 执行结果:
222
参考文章:
https://www.cnblogs.com/poloyy/p/12568983.html