一、什么Selenium
Selenium是一个用于Web应用程序测试的工具,它可以模拟真实浏览器,自动化测试工具,支持多种浏览器,也可以作爬虫,主要用来解决JavaScript渲染问题。
支持的浏览器包括IE, Firefox, Chrome, PhantomJS等,这里特别说一下PhantomJS,它是一个无头浏览器(没有图形界面),但是它可以像普通的浏览器一样输入文字,点击按钮,执行js代码等
二、Selenium基本使用
实例化浏览器对象
from selenium import webdriver
browser = webdriver.PhantomJS()
# 或者
browser = webdriver.Chrome()
使用selenium访问页面
from selenium import webdriver
browser = webdriver.PhantomJS()
browser.get("http://www.baidu.com")
print(browser.page_source)
browser.close()
执行上面这部份代码会打印百度首页的源代码,如果使用的是Chrome()或者其他浏览器,首先他会打开浏览器并访问百度首页,然后控制台打印源代码,最后关闭浏览器。需要注意的是,Chrome和Firefox都需要装一个叫driver的东西(Chrome的叫chromedriver,firefox的叫geckodriver),下载后把他们加到环境变量中就可以了。
元素查找
单个元素
通过css选择器
e1 = browser.find_element_by_id("xxx")
e2 = browser.find_element_by_css_selector(".ooo")
# 通过xpath
e3 = browser.find_element_by_xpath('/xxxx/ooo')
查找器返回的是WebElement对象
常用的元素查找方法
find_element_by_name
find_element_by_id
find_element_by_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
使用By模块查找
from selenium import webdriver
from selenium.webdriver.common.by import By
browser = webdriver.PhantomJS()
browser.get("http://www.baidu.com")
input_kw = browser.get_element(By.ID, "kw")
print(input_kw)
browser.close()
多个元素查找
# 就是把element换成elements,返回的是列表
li = browser.find_elements_by_css_selector('li')
将页面截图保存
browser.save_screenshot("xxx.jpg")
交互操作
input_kw = browser.get_element(By.ID, "kw")
# 往input框输入
input_kw.send_keys("python")
# input_kw.clear() 清除输入框
button = browser.get_element(By.ID, "su")
# 点击按钮
button.click()
# 结果在browser中可以查看
将多个操作串行执行
from selenium import webdriver
from selenium.webdriver import ActionChains
browser = webdriver.Chrome()
url = "http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable"
browser.get(url)
browser.switch_to.frame('iframeResult')
source = browser.find_element_by_css_selector('#draggable')
target = browser.find_element_by_css_selector('#droppable')
actions = ActionChains(browser)
# 将source元素拖动到target元素上
actions.drag_and_drop(source, target)
# 执行
actions.perform()
执行JavaScript
browser.execute_script('alert("hello world")')
获取内容
source = browser.find_element_by_css_selector('#draggable')
# 获取属性
print(source.get_attribute('class'))
# 获取文本
print(source.text)
# 获取id
print(source.id)
# 位置
print(source.location)
# 标签名
print(source.tag_name)
切换选项卡
有时候点击一个链接后会打开一个新的选项卡
browser = webdriver.Chrome()
browser.get('https://www.baidu.com')
browser.execute_script('window.open()')
print(browser.window_handles)
# 切换到第2个选项卡
browser.switch_to_window(browser.window_handles[1])
browser.get('https://www.taobao.com')
前进与后退
import time
from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.zhihu.com')
browser.get('https://www.jianshu.com')
browser.back()
browser.forward()
cookie操作
from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.baidu.com')
print(browser.get_cookies())
browser.add_cookie({'xxx': 'ooo'})
print(browser.get_cookies())
browser.delete_all_cookies()
print(browser.get_cookies())
网友评论