在上篇笔记中已经写下如何安装selenium以及配置浏览器驱动,传送门<selenium 安装>,下面会介绍selenium的基础用法。
以百度链接为例,由于selenium加载受到网速的影响,所以网速差运行可能会较慢或者出错
from selenium import webdriver
driver = webdriver.Firefox()
driver.get('http://www.baidu.com')
1、查找元素的方法
selenium提供了查找元素的方法 find_element_by_XXX 和find_elements_by_XXX,注意这两种的区别,一个后面有s,一个没有s。这个问题很容易就出错。
find_element_by_XXX 表示查找第一个符合条件的元素
# driver.find_element_by_class_name() 根据标签中的class属性进行查找
# driver.find_element_by_id() 根据标签中的id属性进行查找
# driver.find_element_by_name() 根据标签中的name属性进行查找
# driver.find_element_by_tag_name() 根据标签名进行查找
# driver.find_element_by_css_selector() 根据css选择器进行查找
# driver.find_element_by_xpath() 根据xpath语法进行查找
# driver.find_element_by_link_text() 根据链接中的文本内容进行查找
# driver.find_element_by_partial_link_text() 根据链接中的部分文本内容进行查找
find_elements_by_XXX表示查找所有符合条件的元素,然后返回一个列表,用法同上
获取文本框的id属性值,在网页中定位到文本框的位置,清空文本框中的值,然后在输入selenium,如下所示:
driver.find_element_by_id('kw').clear() #clear() 表示清空当前文本框的值
driver.find_element_by_id('kw').send_keys('selenium') #send_keys()表示在文本框中输入内容
定位到该按钮的位置,然后模拟点击
driver.find_element_by_id('su').click() #click() 表示点击一次
简单的模拟浏览器就完成啦,接下来学习各个查找元素方法的使用
以获取百度首页中的新闻为例,各种方法的使用如下,如果想使用哪种需要解注释,然后将其它注释掉即可
import time
from selenium import webdriver
driver = webdriver.Firefox()
driver.get('http://www.baidu.com')
driver.implicitly_wait(10) #隐式等待十秒
driver.find_element_by_class_name('mnav').click()
# driver.find_element_by_name("tj_trnews").click()
# driver.find_element_by_css_selector('#u1 a').click()
# driver.find_element_by_xpath('//div[@id="u1"]/a').click()
# driver.find_element_by_link_text('新闻').click()
# driver.find_element_by_partial_link_text('新').click()
time.sleep(5)
driver.close() #关闭窗口
time.sleep(3)
driver.quit() #关闭浏览器
2、获取属性值与文本内容
from selenium import webdriver
driver = webdriver.Firefox()
driver.get('http://www.baidu.com')
driver.implicitly_wait(10) #隐式等待十秒
content = driver.find_element_by_xpath('//div[@id="u1"]/a').text #获取文本text的值
print(content)
name_attr = driver.find_element_by_xpath('//div[@id="u1"]/a').get_attribute('name') #获取name属性值
print(name_attr)
class_attr = driver.find_element_by_xpath('//div[@id="u1"]/a').get_attribute('class') #获取class属性值
print(class_attr)
href_attr = driver.find_element_by_xpath('//div[@id="u1"]/a').get_attribute('href') #获取href属性值
print(href_attr)
#输出结果为:
# 新闻
# tj_trnews
# mnav
# http://news.baidu.com/
3、window切换
主要练习对窗口的切换,代码中有注释
from selenium import webdriver
driver = webdriver.Chrome() #个人火狐浏览器加载不出来,所以使用谷歌
driver.get("http://www.baidu.com")
# 获取当前的window对象
current_win = driver.current_window_handle
# current_win 当前网页的编号 driver.title 网页标题
print(current_win,driver.title)
driver.implicitly_wait(10)
# 点击首页新闻链接
driver.find_element_by_link_text('新闻').click()
driver.implicitly_wait(10)
# 找到第一篇文章,然后点击查看
driver.find_element_by_css_selector('li.hdline0 a').click()
driver.implicitly_wait(10)
# 此时浏览器会有两个窗口
# 获取所有的窗口
all_windows = driver.window_handles
# 判断
for window in all_windows:
if window != current_win:
# 切换到第二个窗口
driver.switch_to.window(window)
# 获取新闻标题 并输出,验证是否切换成功
title = driver.find_element_by_css_selector('.text_title h1').text
print(title)
# 关闭当前窗口,即关闭新闻详细页面的窗口
driver.close()
# 切换到新闻首页窗口
driver.switch_to.window(current_win)
# 输出一条信息,验证是否切换成功
print(driver.find_element_by_css_selector('#footer span').text)
# 关闭浏览器
driver.quit()
学习到这里只是selenium的冰山一角,更多功能还会继续学习