参考博客:https://www.cnblogs.com/zhaof/p/6953241.html
https://www.jianshu.com/p/234efc36f933
1、selenium库安装
在cmd页面输入pip install selenium
2、浏览器驱动安装
Chrome 版本:https://github.com/mozilla/geckodriver/releases
谷歌浏览器驱动和谷歌一一对应,如果安装的版本不匹配,后期代码在调用的时候会出错
3、声明浏览器对象
from selenium import webdriver
b = webdriver.Chrome()
b = webdriver.Firefox()
4、访问页面
from selenium import webdriver
b = webdriver.Chrome()
b.get("http://www.baidu.com")
print(b.page_source)
browser.close()
上述代码运行后,会自动打开Chrome浏览器,并登陆百度打印百度首页的源代码,然后关闭浏览器
5、查找单个元素
这是百度首页的输入框的属性
这是百度首页右上角“新闻”的属性
#通过class、id、name定位元素
from selenium import webdriver
browser = webdriver.Chrome()
browser.get("https://www.baidu.com/")
# 通过class定位搜索框
a = browser.find_element_by_class_name("s_ipt")
# 通过id定位搜索框
b = browser.find_element_by_id("kw")
# 通过name定位搜索框
c = browser.find_element_by_name("wd")
browser.close()
#HTML是通过 tag 来定位元素的功能的,比如 table是表格,a是超链接 等等,
但是一个网页中会有许多 tag,所以一般来说不会通过 tag 来定位元素
#通过 link text、partial link text定位元素
from selenium import webdriver
browser = webdriver.Chrome()
browser.get("https://www.baidu.com/")
link = browser.find_element_by_link_text("新闻").click()#通过脚本定位到 新闻 这个超链接,并点击
link = browser.find_element_by_partial_link_text("闻").click()#如果链接的字符串太长的话,
全部输入影响代码美观也容易出错,这时就可以采用 partial link text,模糊匹配、截取字符串的一部分定位到元素就可以了
#通过 Xpath 定位元素
find_element_by_xpath()
#XPath定位元素的方法有很多中,这里介绍一种最简单粗暴的:
那就是利用浏览器调试功能,定位到元素所在的那一行右键-->Copy-->Copy XPath
#通过 CSS selector 定位元素
find_element_by_css_selector()
#三言两语不能解释清楚,详情请参考:
https://www.w3school.com.cn/cssref/css_selectors.asp
6、查找多个元素
多个元素和单个元素的区别:使用上没什么区别,只不过单个元素是find_element_by,多个元素是find_elements_by
7、获取文本值
from selenium import webdriver
browser = webdriver.Chrome()
url = 'https://www.zhihu.com/explore'
browser.get(url)
input = browser.find_element_by_class_name('zu-top-add-question')
print(input.text)
8、浏览器的前进和后退
back()
forward()
import time
from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.baidu.com/')
browser.get('https://www.taobao.com/')
browser.get('https://www.python.org/')
browser.back()
time.sleep(1)
browser.forward()
browser.close()
9、异常处理
from selenium import webdriver
from selenium.common.exceptions import TimeoutException, NoSuchElementException
browser = webdriver.Chrome()
try:
browser.get('https://www.baidu.com')
except TimeoutException:
print('Time Out')
try:
browser.find_element_by_id('hello')
except NoSuchElementException:
print('No Element')
finally:
browser.close()