selenium是使用javascript编写,主要用来进行web应用程序测试,在python爬虫中可以用来进行动态网页爬取,解决爬虫中的javascript渲染(执行js语句)。总结记录下,以备后面学习
1. selenium基本使用
安装:pip install selenium
查看支持的浏览器: 安装完后,命令行输入下面语句,可以查看selenium支持的web浏览器,如下图所示
from selenium import webdriver
help(webdriver)
简单使用:这里使用Firefox浏览器,首先得下载Firefox的驱动geckodriver到本地,并将其路径配置到环境变量,下面为简单使用。
from selenium import webdriver browser = webdriver.Firefox() #firefox驱动 browser.get("https://www.zhihu.com/signup?next=%2F") #浏览器打开网页 print(browser.page_source) #打印网页源代码 browser.close() # 关闭浏览器
(报错Message: 'geckodriver' executable needs to be in PATH时, 下载geckodriver,并将其路径配置到环境变量)
简单使用方法:
#简单方法 driver = = webdriver.Firefox() 初始化浏览器 driver.get("http://www.example.com") #打开网页 driver.forward() #前进 driver.back() #后退 driver.close() #关闭浏览器
使用cookie:
# Go to the correct domain driver.get("http://www.example.com") # Now set the cookie. This one's valid for the entire domain cookie = {‘name’ : ‘foo’, ‘value’ : ‘bar’} driver.add_cookie(cookie) #添加cookie,全局的cookie(对该域名下所有url) # And now output all the available cookies for the current URL driver.get_cookies() #获取cookie
2.查找元素
webdriver打开网页后,可以查找网页中的单个或多个元素,并对其操作,下面为常用方法
https://selenium-python.readthedocs.io/locating-elements.html #单个元素 find_element_by_id() 通过id属性 find_element_by_name() 通过name属性 find_element_by_xpath() xpath选择器 find_element_by_link_text() 通过超链接文本定位 find_element_by_partial_link_text() 通过部分超链接文本定位 find_element_by_tag_name() 标签名称 find_element_by_class_name() 类选择器 find_element_by_css_selector() css选择器 #多个元素 (返回一个列表) find_elements_by_name find_elements_by_id find_elements_by_xpath find_elements_by_link_text find_elements_by_partial_link_text find_elements_by_tag_name find_elements_by_class_name find_elements_by_css_selector
通过元素name属性查找:
<html> <body> <form id="loginForm"> <input name="username" type="text" /> <input name="password" type="password" /> <input name="continue" type="submit" value="Login" /> <input name="continue" type="button" value="Clear" /> </form> </body> <html> username = driver.find_element_by_name('username') password = driver.find_element_by_name('password')