selenium:
作用:可以模拟真实浏览器,是web自动化测试工具,支持多种浏览器
官方文档:http://selenium-python.readthedocs.io/index.html
使用前:
1、安装驱动
2、放入环境变量或Anaconda的Script文件夹或者手动输入驱动的path
from selenium import webdriver
options=webdriver.ChromeOptions()
options.add_argument('User-Agent="xxx"')#添加User-Agent
driver=webdriver.Chrome(chrome_options=options)
driver.get('http://www.baidu.com')
1、模拟提交
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
element=driver.find_element_by_name('wd')#找到搜索框
element.send_keys('python')#在搜索框输入python
#下面两句二选一
element.send_keys(Keys.RETURN)#利用键盘事件(方法一)
elem2=driver.find_element_by_id('su').click()#利用鼠标事件点击搜索(方法二)
print(driver.page_source)#打印源码
2、元素选取
a.单个元素选取
find_element_by_id #通过id属性查找
find_element_by_name #通过name属性查找
find_element_by_class_name #通过class_name查找
find_element_by_link_text #通过链接文本查找
find_element_by_partial_link_text #通过链接的部分文本查找
find_element_by_tag_name #通过标签名查找
find_element_by_css_selector('#td') #通过css选择器查找
find_element_by_xpath #通过xpath语句查找
b.多个元素选取
find_elements_by_id #通过id属性查找
find_elements_by_name #通过name属性查找
find_elements_by_class_name #通过class_name查找
find_elements_by_link_text #通过链接文本查找
find_elements_by_partial_link_text #通过链接的部分文本查找
find_elements_by_tag_name #通过标签名查找
find_elements_by_css_selector('#td') #通过css选择器查找
find_elements_by_xpath #通过xpath语句查找
c.通过by类
from selenium.webdirver.common.by import By
driver.find_element(By.xpath,'//dd/text()')
driver.find_elements(By.xpath,'//dd/text()')
d.获取属性
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.id)
print(input.location)
print(input.tag_name)
print(input.size)
print(input.text)
print(input.get_attribute('class'))
3、界面交互
page = driver.find_elements_by_xpath("//div[@class='page']")
driver.execute_script('arguments[0].scrollIntoView();', page[-1])#拖动到可见的元素去
#将动作附加到动作链中串行执行
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)
actions.drag_and_drop(source, target)
actions.perform()
browser.close()
4、键鼠事件
#键盘事件
send_keys(Keys.BACKSPACE) 删除键(BackSpace)
send_keys(Keys.SPACE) 空格键(Space)
send_keys(Keys.TAB) 制表键(Tab)
send_keys(Keys.ESCAPE) 回退键(Esc)
send_keys(Keys.ENTER) 回车键(Enter)
send_keys(Keys.CONTROL,'a') 全选(Ctrl+A)
send_keys(Keys.CONTROL,'c') 复制(Ctrl+C)
#鼠标事件
context_click() # 右击
double_click() # 双击
drag_and_drop() # 拖拽
move_to_element() # 鼠标停在一个元素上
click_and_hold() # 按下鼠标左键在一个元素上
5、浏览器操作
# 浏览器打开网址
driver.get("https://www.baidu.com")
# 浏览器最大化
driver.maximize_window()
# 设置浏览器的高度为800像素,宽度为480像素
driver.set_window_size(480, 800)
# 浏览器后退
driver.back()
# 浏览器前进
driver.forward()
# 浏览器关闭
driver.close()
# 浏览器退出
driver.quit()
6、选项卡操作
from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.baidu.com')
browser.execute_script('window.open()')#新建一个选项卡
browser.switch_to_window(browser.window_handles[0])#转到第一个选项卡
browser.get('https://www.taobao.com')
browser.switch_to_window(browser.window_handles[1])#转到第二个选项卡
browser.get('https://python.org')
7、cookies操作
from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.zhihu.com/explore')
browser.add_cookie({'name': 'name', 'domain': 'www.zhihu.com', 'value': 'zhaofan'})
print(browser.get_cookies())
browser.delete_all_cookies()
8、异常处理
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
browser = webdriver.Chrome()
try:
browser.get('https://www.baidu.com')
except NoSuchElementException:
print('No Element')
finally:
browser.close()