安装
第一步:我是Windows的,在cmd下直接pip install selenium就可以了。
第二步:selenium是一个自动化测试工具,需要配合浏览器使用,如果用的是Chrome的话,就下载一个ChromeDriver,当然其他的浏览器,比如火狐的就安装对应的驱动就行。注意,要根据自己浏览器的版本来下载相应ChromeDriver。查看版本可在浏览器右上角——帮助——关于Google Chrome内查看
第三步:下载好驱动后,将chromedriver.exe文件拖到python的Scrips目录下(确保该路径已经添加到环境变量),检验是否安装成功,可在python里导入看是否会报错就行
使用
应用模块
1.申明浏览器对象并访问某个网页
from selenium import webdriver
# 申明浏览器对象
browser = webdriver.Chrome()
# get()方法请求网页
browser.get('http:www.baidu.com')
执行以上代码后,将会自动弹出一个新窗口进入到百度主页下
2. 获取节点
2.1 单个节点的获取,
比如我们要获取搜索框,并输入查找的关键词,python代码及结果如下。
input = browser.find_element_by_id('kw')是获取输入框的节点(即找到网页源代码中的id属性为"kw"的节点,注意一点,每个id属性的值在网页中是唯一的,一个id属性只能表示一个节点,所以才会有by_id()这种方法),input.send_keys('python')是输入关键词“python”查找,当然,这儿只是在搜索框输入了python,并没有回车或者点击搜索。
当然查找节点的方法有很多,下面列出单个节点查找的方法
find_element_by_xpath('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表达式') # css表达式查找
2.2 多个节点的获取,
那么如果我们需要的是一类的节点,例如糗事百科的段子,
他们是属于一类的标签,如果还是用上面介绍的方法的话,就只能得到一个节点(一个段子的内容)。此时若要获取所有要得到的节点,那么就用elements(上面的方法中的element改为elements),这样得到的就是一个列表,列表的每个元素表示一个段子的节点。
3. 节点交互
输入文字用send_keys()方法,清空文字用clear()方法, 点击按钮用click()方法,返回用back(),前进用forward(),
4. 获取节点信息
4.1 获取属性
使用get_attribute()方法
例已经得到该节点input,那么要得到它的属性name
input.get_attribute('name')
4.2 获取文本内容
每个WebElement节点都有text属性值,直接调用这个属性就可以得到节点内部的文本信息。有两种方法
print(input.text) # 方法一:得到这个节点的文本信息
input.get_attribute('textContent') # 方法二:得到这个节点的文本信息
这儿input节点没有内容,所以返回的是空值
对了,之前有个疑问,就是browser.get(url)之后,经过多次操作之后,网页就可能不是之前的链接对应的网页了,那么这样还能获取到当前网页的节点吗,亲自验证了一下才发现,每次刷新后,网页虽然变了,获取的节点依然是当前网页下的节点(注意,不能手动的去操作浏览器,否则页面发生跳转之后,程序是不会调到这个跳转页面来的)