Selenium系列(一)插件安装以及元素定位详解

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到本地:


<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值是唯一的,属于一个元素

# 找到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

参考文章:
https://www.cnblogs.com/poloyy/p/12568983.html

你可能感兴趣的:(Selenium,selenium,python,chrome)