什么是selenium?
(1)Selenium是一个用于Web应用程序测试的工具。
(2)Selenium 测试直接运行在浏览器中,就像真正的用户在操作一样。
(3)支持通过各种driver(FirfoxDriver,IternetExplorerDriver,OperaDriver,ChromeDriver)驱动真实浏览器完成测试。
(4)selenium也是支持无界面浏览器操作的。
作用:
模拟浏览器功能,自动执行网页中的js代码,实现动态加载
如何安装selenium?
- 操作谷歌浏览器驱动下载地址(大版本一致即可)
http://chromedriver.storage.googleapis.com/index.html
其他浏览器:edge: https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/
火狐: https://github.com/mozilla/geckodriver/releases
#selenium的使用步骤?
#(1)导入:
from selenium import webdriver
#(2)创建谷歌浏览器操作对象:
path = '谷歌浏览器驱动文件路径'
browser = webdriver.Chrome(path)
#(3)访问网址
url = '要访问的网址'
browser.get(url)
元素定位:自动化要做的就是模拟鼠标和键盘来操作来操作这些元素,
点击、输入等等。操作这些元素前首先
要找到它们,WebDriver提供很多定位元素的方法
方法:
1,3,5方式最常用
# 1.find_element_by_id(id=‘su’)
button = browser.find_element_by_id('su')
# 2.find_elements_by_name(name=‘wd’)
name = browser.find_element_by_name('wd')
# 3.find_elements_by_xpath (标签名+id值)
xpath1 = browser.find_elements_by_xpath('//input[@id="su"]')
# 4.find_elements_by_tag_name (标签名)
names = browser.find_elements_by_tag_name('input')
# 5.find_elements_by_css_selector (bs4)
my_input = browser.find_elements_by_css_selector('#kw')[0]
# 6.find_elements_by_link_text(a标签)
browser.find_element_by_link_text("新闻")
获取元素属性
.get_attribute('class')
获取元素文本
.text
获取标签名
.tag_name
点击:
click()
输入:
send_keys()
后退操作:
browser.back()
前进操作:
browser.forword()
模拟JS滚动:
js='document.documentElement.scrollTop=100000'
browser.execute_script(js) 执行js代码
获取网页代码:
page_source
退出:
browser.quit()
可以让你不打开UI界面的情况下使用 Chrome 浏览器,所以运行效果与 Chrome 保持完美一致
1.系统要求:
Chrome
Unix\Linux 系统需要 chrome >= 59
Windows 系统需要 chrome >= 60
Python3.6及以上
Selenium==3.4.*及以上
ChromeDriver==2.31 及以上
2.配置:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument('‐‐headless')
chrome_options.add_argument('‐‐disable‐gpu')
# 日志的打印级别,禁用headless的默认输出
chrome_options.add_argument('--log-level=3')
#自己的谷歌安装路径
path = r'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe'
chrome_options.binary_location = path
browser = webdriver.Chrome(options=chrome_options)
browser.get('http://www.baidu.com/')
3.配置封装:
from selenium import webdriver
#这个是浏览器自带的 不需要我们再做额外的操作
from selenium.webdriver.chrome.options import Options
def share_browser():
#初始化
chrome_options = Options()
chrome_options.add_argument('--headless')
# 禁用GPU加速
chrome_options.add_argument('‐‐disable‐gpu')
# 日志的打印级别,禁用headless的默认输出
chrome_options.add_argument('--log-level=3')
# 如果“--log-level”不起作用,在加上:options.add_experimental_option('excludeSwitches', ['enable-logging'])
#浏览器的安装路径 打开文件位置
#这个路径是你谷歌浏览器的路径
path = r'C:\Program Files\Google\Chrome\Application\chrome.exe'
chrome_options.binary_location = path
browser = webdriver.Chrome(options=chrome_options)
return browser
封装调用:
from handless import share_browser
browser = share_browser()
browser.get('http://www.baidu.com/')
#拍一张快照
browser.save_screenshot('handless1.png')
常用options参数
options.add_argument('--disable-infobars') # 禁止策略化
options.add_argument('--no-sandbox') # 解决DevToolsActivePort文件不存在的报错
options.add_argument('window-size=1920x3000') # 指定浏览器分辨率
options.add_argument('--disable-gpu') # 谷歌禁用GPU加速
options.add_argument('--incognito') # 隐身模式(无痕模式)
options.add_argument('--disable-javascript') # 禁用javascript
options.add_argument('--start-maximized') # 最大化运行(全屏窗口),不设置,取元素会报错
options.add_argument('--hide-scrollbars') # 隐藏滚动条, 应对一些特殊页面
options.add_argument('blink-settings=imagesEnabled=false') # 不加载图片, 提升速度
options.add_argument('--headless') # 浏览器不提供可视化页面(无头模式). linux下如果系统不支持可视化不加这条会启动失败
options.binary_location = r"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" # 手动指定使用的浏览器位置
chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222") #调用原来的浏览器,不用再次登录即可重启
options.add_argument('lang=en_US') # 设置语言
options.add_argument('User-Agent=Mozilla/5.0 (Linux; U; Android 8.1.0; zh-cn; BLA-AL00 Build/HUAWEIBLA-AL00) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.132 MQQBrowser/8.9 Mobile Safari/537.36')
prefs = {"":""}
prefs["credentials_enable_service"] = False
prefs["profile.password_manager_enabled"] = False
chrome_option_set.add_experimental_option("prefs", prefs) # 屏蔽'保存密码'提示框
针对chrome76版本及以上版本,需要去掉Chrome提示受到自动软件控制使用:
option.add_argument('disable-infobars') #去掉Chrome提示受到自动软件控制
在chrome76版本及以上版本,需要使用
chrome_options.add_experimental_option('excludeSwitches', ['enable-automation']) #以开发者模式启动调试chrome,可以去掉提示受到自动软件控制
chrome_options.add_experimental_option('useAutomationExtension', False) #去掉提示以开发者模式调用
chrome_options.add_argument('--kiosk-printing') #这样就可以静默打印,直接使用默认打印机进行打印。如需是Chrome全屏+静默打印: 使用" --kiosk --kiosk-printing" :浏览器默认是全屏显示,而且Esc、F11和鼠标右键都无法使用,在软件编程时,使用JS调用浏览器打印功能时,会跳过打印预览,直接进行打印操作。