Selenium是一个自动化测试工具,利用它可以模仿人类行为,如点击、下滑、移动鼠标等,同时还能获取网页源码
相关链接:https://www.selenium.dev/
目录
1、准备工作
2、基本示范
3、功能介绍
4、信息获取
5、切换页面
1、准备工作
首先要确保安装好selenium库和对应浏览器的驱动。
2、基本示范
这里用的是Chrome浏览器
from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.baidu.com')
browser.quit() # 退出
运行代码后会弹出一个百度的页面
如果你用的发其他浏览器,比如Firefox就可以这样写
browser = webdriver.Firefox()
3、功能介绍
3.1、请求网站
用get()方法请求网站,传入一个url即可,同时我们可以调用page_source获取源码
from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.baidu.com')
print(browser.page_source) # 获取网页源码
browser.quit() # 退出
3.2、单个节点查找
我们查找一下百度的输入框
我们可以看到这个input标签内有哪些内容class、id、name,我们可以通过这些来定位这个位置,当然也可以根据css、xpath来查找
from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.baidu.com')
a = browser.find_element_by_class_name('s_ipt')
b = browser.find_element_by_id('kw')
c = browser.find_element_by_xpath('//input[@class="s_ipt"]')
browser.quit() # 退出
print(a)
print(b)
print(c)
输出结果:
<selenium.webdriver.remote.webelement.WebElement (session="3a9746646e68a7e5ddb24304cbd6c705", element="fa252264-5131-42a3-ac27-b393d51867c1")>
<selenium.webdriver.remote.webelement.WebElement (session="3a9746646e68a7e5ddb24304cbd6c705", element="fa252264-5131-42a3-ac27-b393d51867c1")>
<selenium.webdriver.remote.webelement.WebElement (session="3a9746646e68a7e5ddb24304cbd6c705", element="fa252264-5131-42a3-ac27-b393d51867c1")>
我们可以发现都是一样的
find_element_by_class_name()是根据class属性查找find_element_by_id()就是根据id来查找
这里列出所有定位单个节点的方法,大家可以根据自己的习惯来选择
3.3、节点交互
这里介绍几个常用的功能:点击、输入文本、清空文本
点击用click(),输入文本用send_keys(),清楚文本用clear()
示例:
这里用百度搜索爬虫
首先是要找到输入框所在的HTML位置
我们可以轻松的找到它,在class为s_ipt的input标签下
输入文本
browser.find_element_by_class_name('s_ipt').send_keys('爬虫')
清空文本
中间加个sleep,可以清楚看到全过程
browser.find_element_by_class_name('s_ipt').send_keys('爬虫')
time.sleep(1)
browser.find_element_by_class_name('s_ipt').clear()
最后点击百度一下
browser.find_element_by_id('su').click()
4、信息获取
4.1、属性获取
既然可以定位节点那也可以获取节点的属性,可以调用get_attribute()
用上一个案例中的百度一下的按钮吧
from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.baidu.com')
a = browser.find_element_by_id('su')
print(a.get_attribute('class'))
browser.quit() # 退出
运行结果:
bg s_btn
对比一下,一模一样
4.2、获取文本
文本在class=“title”的span标签内
from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.baidu.com')
a = browser.find_element_by_class_name('title')
print(a.text)
browser.quit() # 退出
运行结果:
下载百度APP
咦,怎么回事呢?
在网页源码中class=“title”的标签不唯一,但是它只会返回第一个符合条件的。那现在怎么办呢?用xpath定位,右键点击标签可以直接copy XPath规则
from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.baidu.com')
a = browser.find_element_by_xpath('//*[@id="s_icons"]/a[2]/span[2]')
print(a.text)
browser.quit() # 退出
但是直接报错了,原来是我打开的百度与驱动器打开的百度设置不同。这里就用驱动器打开的百度调试就好了。
这就对上了
5、切换页面
第一次打开百度一下的页面,第二次新建一个页面打开知乎的官网
from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.baidu.com')
browser.execute_script('window.open()')
browser.switch_to.window(browser.window_handles[1])
browser.get('https://www.zhihu.com/signin?next=%2F')
browser.quit() # 退出
execute_script(‘window.open()’)这个命令就是打开一个新的选项卡,switch_to.window()是切换到某个选项卡,这里是切换到第二个选项卡