selenium工具的使用场景
# 用于自动化测试
# 解决requests模块无法执行js代码的问题
# 安装selenium工具
pip install selenium
浏览器驱动:http://npm.taobao.org/mirrors/chromedriver/
驱动一定要和浏览器的版本对应上(80.0.3987.163)
简单使用
from selenium import webdriver
# 得到一个谷歌浏览器对象
# 指定使用哪个驱动
bro = webdriver.Chrome(executable_path='./chromedriver.exe')
bro.get('http://www.mzitu.com') # 在地址栏输入了妹子图
time.sleep(2)
print(bro.page_source)
time.sleep(2)
bro.close()
selenium模拟登陆百度
from selenium import webdriver
import time
bro = webdriver.Chrome(executable_path='./chromedriver.exe') # 得到一个谷歌浏览器对象
# 隐式等待
bro.implicitly_wait(5) # 隐士等待:找一个控件,如果控件没有加载出来,等待5s中 等待所有,只需要写着一句,以后找所有控件都按这个操作来
bro.get('http://www.baidu.com')
login_btn = bro.find_element_by_link_text('登录')
login_btn.click()
account_login = bro.find_element_by_id('TANGRAM__PSP_11__footerULoginBtn')
account_login.click()
username_input = bro.find_element_by_id('TANGRAM__PSP_11__userName')
password_input = bro.find_element_by_id('TANGRAM__PSP_11__password')
login_submit = bro.find_element_by_id('TANGRAM__PSP_11__submit')
username_input.send_keys('183xxxxxxx407')
password_input.send_keys('xxxxxxxxx')
time.sleep(5)
login_submit.click()
time.sleep(10)
print(bro.get_cookies())
bro.close()
selenium的find系列
# 所有的方法
# 1、find_element_by_id # 通过id查找控件
# 2、find_element_by_link_text # 通过a标签内容找
# 3、find_element_by_partial_link_text # 通过a标签内容找,模糊匹配
# 4、find_element_by_tag_name # 标签名
# 5、find_element_by_class_name # 类名
# 6、find_element_by_name # name属性
# 7、find_element_by_css_selector # 通过css选择器
# 8、find_element_by_xpath # 通过xpaht选择器
注意:
find_elements_by_xxx的形式是查找到多个元素,结果为列表
控件的操作
# 获取元素的属性
重点
tag.get_attribute('href') # 找当前控件的href属性对的值
tag.text # 获取文本的内容
# 了解
tag.id # 当前控件的id号
tag.location # 当前控件在页面的位置
tag.tag_name # 当前控件的标签名
tag.size # 当前控件的大小
无界面浏览器
无界面浏览器(phantomjs)
# 谷歌浏览器也支持不打开页面
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
chrome_options = Options() # 实例化得到一个Options对象
# 进行浏览器的相关设置
chrome_options.add_argument('window-size=1920x3000') # 指定浏览器的分辨率
chrome_options.add_argument('--disable-gpu') # 谷歌文档提到需要加上这个属性来规避一些bug
chrome_options.add_argument('--hide-scrollbars') # 隐藏滚动条
chrome_options.add_argument('blink-settings=imagesEnabled=false') #不加载图片
chrome_options.add_argument('--headless') # 浏览器不提供可视化页面. linux下如果系统不支持可视化不加这条会启动失败
bro=webdriver.Chrome(chrome_options=chrome_options,executable_path='./chromedriver.exe')
bro.get('https://www.baidu.com/')
print(bro.page_source)
bro.close()
元素之间的交互
# tag.send_keys() # 往里面写内容
# tag.click() # 点击控件
# tag.clear() # 清空控件内容
执行js代码
from selenium import webdriver
import time
bro = webdriver.Chrome(executable_path='./chromedriver.exe')
bro.implicitly_wait(5)
bro.get('http://www.baidu.com/')
bro.execute_script('window.open()')
bro.execute_script('window.open()')
time.sleep(2)
bro.close()
模拟浏览器前进后退
from selenium import webdriver
import time
browser=webdriver.Chrome(executable_path='./chromedriver.exe')
browser.get('https://www.baidu.com')
browser.get('https://www.taobao.com')
browser.get('http://www.sina.com.cn/')
browser.back() # 后退
time.sleep(1)
browser.forward() # 前进
browser.close()
选项卡管理(了解)
from selenium import webdriver
import time
browser=webdriver.Chrome()
browser.get('https://www.baidu.com')
browser.execute_script('window.open()')
print(browser.window_handles) #获取所有的选项卡
browser.switch_to_window(browser.window_handles[1])
browser.get('https://www.taobao.com')
time.sleep(2)
browser.switch_to_window(browser.window_handles[0])
browser.get('https://www.sina.com.cn')
browser.close()
异常处理
from selenium import webdriver
from selenium.common.exceptions import TimeoutException,NoSuchElementException,NoSuchFrameException
browser=webdriver.Chrome()
try:
browser.get('')
except Exception as e:
print(e)
finally:
browser.close()
动作链
#### 如何把屏幕拉倒最后(js控制)
# bro.execute_script('window.scrollTo(0,document.body.offsetHeight)')