在使用Selenium做自动化时,首先需要选择
页面上的元素,然后才可以做点击、输入之类的操作
要告诉浏览器,要操作哪个元素
我们需要找到这个元素的特征 以百度为例
我们可以右键
需要找的元素点击检查
就会弹出 开发者工具
,并且自动定位到我们需要找的这个元素
另外,我们也可以在打开网页后按下F12
打开开发者工具
,按下这个图标
然后鼠标在去页面上点击相应的元素,也可以自动定位
根据id属性 选择元素
根据上文中我们定位的百度搜索框的代码
<input type="text" class="s_ipt" name="wd" id="kw" maxlength="100" autocomplete="off">
百度搜索框的属性id是kw
所以如果我们要选择百度输入框,我们可以通过定位这个id属性kw
但是请注意:这个名字叫kw的id属性必须在这个页面是唯一的,才可以准确定位。
如果有多个属性ID名字相同的元素,它将只返回第一个匹配的元素
导入By模块
在定位之前,我们需要用到Selenium 中的 By
模块,用于定位元素时指定定位策略。
from selenium.webdriver.common.by import By
find_element()选择元素
根据id属性来选择元素我们使用find_element
element = wd.find_element(By.ID, 'kw')
send_keys()发送文本
element.send_keys()
是 Selenium 中的一个方法,用于向输入框或可编辑元素发送文本或按键事件。
上一步,我们选择了ID名为kw的元素(也就是百度搜索框),现在我们向这个输入框输入yuofyou
element.send_keys("yuofyou")
完整代码
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
wd = webdriver.Chrome(service = Service('chromedriver.exe'))
wd.get('https://www.baidu.com')
element = wd.find_element(By.ID, 'kw')
element.send_keys("yuofyou")
input()
此时我们发现yuofyou
被输入上去了
我们如果需要搜索 有两种方法
一种是 回车
另外一种是 点击百度一下
这个按钮
回车的方法我们只需要在发送文本的时候加上一个换行符\n
:
element.send_keys("yuofyou\n")
清除输入框
如果我们想清除输入框中现在已有是字符串
使用
elemet.clear()
click按钮点击
无论是点击按钮,还是输入内容。首先第一步选择元素
通过开发者工具
可以看到百度一下
的按钮id是su
使用上文提供的方法选择这个按钮
element = wd.find_element(By.ID,'su')
点击按钮
element.click()
完整代码
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
wd = webdriver.Chrome(service = Service('chromedriver.exe'))
wd.get('https://www.baidu.com')
element = wd.find_element(By.ID, 'kw')
element.send_keys("yuofyou")
element = wd.find_element(By.ID,'su')
element.click()
input()
根据class属性 选择元素
在实际应用中我们发现有些元素无法通过ID去定位选择,只能通过class属性
例如我想点击这个相机图标
定位代码发现只有class属性
我们使用By模块里的CLASS_NAME进行定位 并点击
element = wd.find_element(By.CLASS_NAME,'soutu-btn')
element.click()
完整代码:
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
wd = webdriver.Chrome(service = Service('chromedriver.exe'))
wd.get('https://www.baidu.com')
element = wd.find_element(By.ID, 'kw')
element.send_keys("yuofyou")
element = wd.find_element(By.ID,'su')
element.click()
element = wd.find_element(By.CLASS_NAME,'soutu-btn')
element.click()
input()
但是!!!注意:在这种跳转了其他页面的情况,有一定概率你会触发一个报错
大致就是因为程序运行实在太快了,执行click以后因为网速的原因还没能跳转到第二个页面,程序就开始查找元素,就会报错找不到这个元素
这个时候我们可以在click以后添加一个延迟
导入time模块
import time
在需要延迟的地方加上一句这个
time.sleep(1)
完整代码:
import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
wd = webdriver.Chrome(service = Service('chromedriver.exe'))
wd.get('https://www.baidu.com')
element = wd.find_element(By.ID, 'kw')
element.send_keys("yuofyou")
element = wd.find_element(By.ID,'su')
element.click()
time.sleep(1)
element = wd.find_element(By.CLASS_NAME,'soutu-btn')
element.click()
input()