1.Selenium
1.
什么是
selenium
?
(1)
Selenium
是一个用于
Web
应用程序测试的工具。
(2)
Selenium
测试直接运行在浏览器中,就像真正的用户在操作一样。
(3)支持通过各种
driver
(FirfoxDriver,
IternetExplorerDriver
,
OperaDriver
,
ChromeDriver
)驱动真实浏览器完成测试。
(4)
selenium
也是支持无界面浏览器操作的。
2.
为什么使用
selenium
?
模拟浏览器功能,自动执行网页中的
js
代码,实现动态加载
3.
如何安装
selenium
?
(1)操作谷歌浏览器驱动下载地址 Chrome
(2)谷歌驱动和谷歌浏览器版本之间的映射表
http
:
//
blog
.
csdn
.
net
/
huilan_same
/
article
/
details
/
51896672
(3)查看谷歌浏览器版本
谷歌浏览器右上角
‐‐>
帮助
‐‐>
关于
(4)
pip install selenium
4.
selenium
的使用步骤?
(1)导入:
from selenium
import
webdriver
(2)创建谷歌浏览器操作对象:
path
=
谷歌浏览器驱动文件路径
browser
=
webdriver
.
Chrome
(
path
)
(3)访问网址
url
=
要访问的网址
browser
.
get
(
url
)
# (1)导入selenium
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
# (2) 创建浏览器操作对象
# 不自动关闭浏览器
option = webdriver.ChromeOptions()
option.add_experimental_option("detach", True)
# 将option作为参数添加到Chrome中
driver = webdriver.Chrome(options=option)
# (3)访问网站
url = 'https://www.jd.com/'
driver.get(url)
# page_source 获取网页源码
content = driver.page_source
print(content)
4
‐
1
:
selenium
的元素定位?
元素定位:自动化要做的就是模拟鼠标和键盘来操作来操作这些元素,点击、输入等等。操作这些元素前首先 要找到它们,WebDriver
提供很多定位元素的方法
方法:
1.
find_element_by_id
eg
:
button
=
browser
.
find_element_by_id
(
'su'
)
2.
find_elements_by_name
eg
:
name
=
browser
.
find_element_by_name
(
'wd'
)
3.
find_elements_by_xpath
eg
:
xpath1
=
browser
.
find_elements_by_xpath
(
'//input[@id="su"]'
)
4.
find_elements_by_tag_name
eg
:
names
=
browser
.
find_elements_by_tag_name
(
'input'
)
5.
find_elements_by_css_selector
eg
:
my_input
=
browser
.
find_elements_by_css_selector
(
'#kw'
)[
0
]
6.
find_elements_by_link_text
eg
:
browser
.
find_element_by_link_text
(
"
新闻
"
)
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
# 不自动关闭浏览器
option = webdriver.ChromeOptions()
option.add_experimental_option('detach',True)
# 将option作为参数添加到Chrome中
browser = webdriver.Chrome(options=option)
# 设置浏览器大小:全屏
browser.maximize_window()
# 访问网站
url = 'https://www.baidu.com'
browser.get(url)
# 元素定位
# 根据id来找到对象
# button = browser.find_element(by=By.ID,value='su')
# 根据name来找到对象
# button = browser.find_element(by=By.NAME,value='wd')
# XPath还可以使用元素的属性值来定位。//input 表示当前页面某个 input 标签,[@id='kw'] 表示这个元素的 id 值是 kw。
# button = browser.find_element(by=By.XPATH,value="//input[@id='su']")
# tag_name 定位即通过标签名称定
# button = browser.find_element(by=By.TAG_NAME,value='input')
# 以id定位语法结构为:#加 id 名,实现CSS定位,
# button = browser.find_element(by=By.CSS_SELECTOR,value='#su')
# 通过link_text定位,点击‘新闻’超链接
# button = browser.find_element(by=By.LINK_TEXT,value='新闻')
# 通过partial_link_text定位,用超链接文字的部分文本来定位元素,类似数据库的模糊查询
# button = browser.find_element(by=By.PARTIAL_LINK_TEXT,value='新')
# print(button)
# 关闭浏览器
browser.close()
4
‐
2
:
访问元素信息
获取元素属性
.
get_attribute
(
'class'
)
获取元素文本
.
text
获取标签名
.
tag_name
from selenium import webdriver
from selenium.webdriver.chrome import service
from selenium.webdriver.common.by import By
option = webdriver.ChromeOptions()
option.add_experimental_option('detach',True)
browser = webdriver.Chrome(option)
browser.maximize_window()
url = 'https://www.baidu.com/'
browser.get(url)
input = browser.find_element(by=By.ID,value='su')
print(input.get_attribute('class'))
print(input.tag_name)
# 获得<>中间的内容</>
print(input.text)
news = browser.find_element(by=By.LINK_TEXT,value='新闻')
print(news)
print(news.text)
browser.close()
4
‐
3
:
交互
点击
:
click
()
输入
:
send_keys
()
后退操作
:
browser
.
back
()
前进操作
:
browser
.
forword
()
模拟JS
滚动
:
js
=
'document.documentElement.scrollTop=100000'
browser
.
execute_script
(
js
)
执行
js
代码
获取网页代码:page_source
退出:browser
.
quit
()
from selenium import webdriver
from selenium.webdriver.chrome import service
from selenium.webdriver.common.by import By
option = webdriver.ChromeOptions()
option.add_experimental_option('detach',True)
browser = webdriver.Chrome(option)
browser.maximize_window()
url = 'https://www.baidu.com'
browser.get(url)
import time
time.sleep(2)
# 获取文本框的对象
input = browser.find_element(by=By.ID,value='kw')
# 在文本框中输入周杰伦
input.send_keys('周杰伦')
time.sleep(4)
# 获取百度一下的按钮
button = browser.find_element(by=By.ID,value='su')
# 点击一下
button.click()
time.sleep(4)
# 滑到底部
js_bottom = 'document.documentElement.scrollTop=100000'
browser.execute_script(js_bottom)
time.sleep(3)
# 获取下一页的按钮 点击
next = browser.find_element(by=By.XPATH,value='//a[@class="n"]')
next.click()
time.sleep(4)
# 回到上一页
browser.back()
time.sleep(4)
# 回去
browser.forward()
time.sleep(4)
# 退出
browser.quit()
2.Phantomjs
1.
什么是
Phantomjs
?
(1)是一个无界面的浏览器
(2)支持页面元素查找,
js
的执行等
(3)由于不进行
css
和
gui
渲染,运行效率要比真实的浏览器要快很多
2.
如何使用
Phantomjs
?
(1)获取
PhantomJS
.
exe
文件路径
path
(2)
browser
=
webdriver
.
PhantomJS
(
path
)
(3)
browser
.
get
(
url
)
扩展:保存屏幕快照
:
browser
.
save_screenshot
(
'baidu.png'
)
3.Chrome handless
Chrome-headless 模式,
Google
针对
Chrome
浏览器
59
版 新增加的一种模式,可以让你不打开
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'
)
path
=
r'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe'
chrome_options
.
binary_location
=
path
browser
=
webdriver
.
Chrome
(
chrome_options
=
chrome_options
)
browser
.
get
(
'http://www.baidu.com/'
)
3.
配置封装:
from selenium import webdriver
from selenium.webdriver.chrome import service
option = webdriver.ChromeOptions()
option.add_argument('--headless') # 设置无窗口模式
option.add_argument('--disable-gpu') # 禁用gpu加速
browser = webdriver.Chrome(option)
browser.maximize_window()
url = 'https://www.baidu.com'
browser.get(url)
browser.save_screenshot('handless1.png')
作业:京东