selenium安装与使用(转)

目录

一、安装

二、使用

1、声明浏览器对象

2、访问页面

3、查找节点

4、动作链

5、执行js代码

6、切换Frame

7、延时等待

8、前进与后退

9、Cookies

10、操作标签页

11、异常处理

一、安装
1,pip3 install selenium            #注意新版本标注不再支持phantomjs

2,下载各浏览器驱动(以chrome为例)

(1)Chrome需要下载chromedriver

下载地址:http://chromedriver.storage.googleapis.com/index.html

(2)将文件目录添加到环境变量

mac和linux :sudo mv chromedriver /usr/local/bin/chromedriver

(3)验证:bath 输入chromedriver

二、使用
1、声明浏览器对象
from selenium import webdriver
browser =webdriver.Chrome()
browser =webdriver.Firefox()
browser = webdriver.Edge()
browser = webdriver.Safari()
browser = webdriver.PhantomJS() #弃用
file_detector_context #重写当前文件检测器
name #浏览器名称
start_client () #开始访问前
stop_client () #结束访问后
start_session() #创建具有所需功能的新会话。
create_web_element() #指定element_id创建标签
execute() #执行命令
get() #加载网页
title #当前网页title
find_element。。。。。。 #查找节点
execute_script() #同步执行Js
execute_async_script() #异步执行
current_url #当前url
page_source #网页源码
close() #关闭
quit() #退出驱动程序并关闭所有相关窗口。
current_window_handle #当前窗口句柄
window_handles #所有窗口句柄
maximize_window() #窗口最大化
fullscreen_window() #全屏
minimize_window #窗口最小化
switch_to #切换element = driver.switch_to.active_element
alert = driver.switch_to.alert
driver.switch_to.default_content()
driver.switch_to.frame('frame_name')
driver.switch_to.frame(1)
driver.switch_to.frame(driver.find_elements_by_tag_name("iframe")[0])
driver.switch_to.parent_frame()
driver.switch_to.window('main')
back() #后退
forward() #前进
refresh() #刷新
get_cookies() #获取当前cookies
get_cookie(name) #按名称获取单个cookie。如果找到则返回cookie,否则返回none。
delete_cookie(name) #删除cookie
delete_all_cookies() #清空cookie
add_cookie(diect) #增加cookie
implicitly_wait(time) #隐式等待
set_script_timeout(wait_time) #设置脚本在引发错误之前执行\异步\脚本调用。
set_page_load_timeout(wait_time) #设置等待页面加载完成的时间在抛出错误之前。
desired_capabilities #返回正在使用的驱动程序当前所需的功能
get_screenshot_as_file(filename) #将窗口截图存为文件
save_screenshot(filename) #将当前窗口的屏幕截图保存到PNG图像文件中
get_screenshot_as_png() #截图,二进制
get_screenshot_as_base64() #解脱,base64
set_window_size(width, height, windowHandle='current') #设置窗口大小
get_window_size() #获取窗口大小
set_window_position(x,y) #设置窗口位置
get_window_position() #获取窗口位置
get_window_rect() #获取窗口的x、y坐标以及当前窗口。
set_window_rect() #设置窗口的x、y坐标
file_detector #设置发送键盘输入时要使用的文件检测器。
orientation #设置设备的当前方向
driver.orientation = 'landscape'
allowed_values = ['LANDSCAPE', 'PORTRAIT']
application_cache #返回要与浏览器应用程序缓存交互的applicationcache对象
get_log(log_tpye) #获取可用日志类型的列表
2、访问页面
启动浏览器出现‘Chrome正在受到自动软件的控制’的问题:

from selenium import webdriver

option = webdriver.ChromeOptions() #加载启动配置
option.add_argument('disable-infobars')

browser = webdriver.Chrome(chrome_options=option)
browser.get('https://www.taobao.com')
from selenium import webdriver

browser = webdriver.Chrome()
browser.get('https://www.taobao.com')
page = browser.page_source # <class 'str'>
print(page,type(page),sep='\n')
browser.close()
3、查找节点
(1)单个节点

from selenium import webdriver

browser = webdriver.Chrome()
browser.get('https://www.taobao.com')
input_1 = browser.find_element_by_id('q')
input_2 = browser.find_element_by_css_selector('#q')
input_3 = browser.find_element_by_xpath('//*[@id="q"]')
print(input_1,input_2,input_3,sep='\n')
browser.close()
三种方法殊途同归:

<selenium.webdriver.remote.webelement.WebElement", element="0.652580522307187-1")>
<selenium.webdriver.remote.webelement.WebElement ", element="0.652580522307187-1")>
<selenium.webdriver.remote.webelement.WebElement", element="0.652580522307187-1")>

所有方法

browser.find_element_by_id()
browser.find_element_by_name()
browser.find_element_by_xpath()
browser.find_element_by_css_selector()
browser.find_element_by_class_name()
browser.find_element_by_link_text()
browser.find_element_by_tag_name()
browser.find_element_by_partial_link_text()
通用方法:find_element()

from selenium import webdriver
from selenium.webdriver.common.by import By

browser = webdriver.Chrome()
browser.get('https://www.taobao.com')
input_1 = browser.find_element(By.ID,'q')
print(input_1)
browser.close()
<selenium.webdriver.remote.webelement.WebElement (session="xxx", element="0.13972884174276556-1")>

(2)多节点

与单节点方法相似,多了s,获取的结果是WebElement 的列表。

find_elements()

from selenium import webdriver
from selenium.webdriver.common.by import By

browser = webdriver.Chrome()
browser.get('https://www.taobao.com')
input_1 = browser.find_elements(By.CSS_SELECTOR,'.service-bd li')
print(input_1)
browser.close()
其他方法

browser.find_elements_by_id()
browser.find_elements_by_name()
browser.find_elements_by_xpath()
browser.find_elements_by_css_selector()
browser.find_elements_by_class_name()
browser.find_elements_by_link_text()
browser.find_elements_by_tag_name()
browser.find_elements_by_partial_link_text()
 

(3)节点交互

常见方法:send_keys():输入文字,clear():清空文字,click():单击

from selenium import webdriver
import time

browser = webdriver.Chrome()
browser.get('https://www.baidu.com')
inputs = browser.find_element_by_id('kw')
inputs.send_keys('iphone')
time.sleep(1)
inputs.clear()
inputs.send_keys('ipad')
button = browser.find_element_by_id('su')
button.click()
4、动作链
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) #声明对象
actions.drag_and_drop(source,target)
actions.perform() #执行
 

5、执行js代码
from selenium import webdriver

browser = webdriver.Chrome()
browser.get('https://www.zhihu.com/explore')
browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')
browser.execute_script('alert("To Btottom")')
 

WebElement对象下主要方法

tag_name #标签名
text #标签文本
click() #点击此标签
submit() #提交表单
clear() #如果是文本输入元素,则清除文本
get_property(name) #获取标签给定属性
get_attribute(name) #同上,未发现区别
is_selected() #返回是否选择了元素。可用于检查是否选中复选框或单选按钮。
is_enabled() #返回元素是否已启用
send_keys() #模拟输入元素。
is_displayed() #是否可见
location_once_scrolled_into_view #
size #元素大小
value_of_css_property(name) #css属性值
location #元素在可渲染画布中的位置
rect #带有元素大小和位置的字典。
screenshot_as_base64 #获取作为base64编码字符串的当前元素的屏幕截图。
img_b64 = element.screenshot_as_base64
screenshot_as_png #获取当前元素作为二进制数据的屏幕截图
screenshot(filename) #截图保存,返回布尔值
parent #父节点
id #内部使用,检测是否同意对象


6、切换Frame
iframe节点,相当于页面的子页面。Selenium默认操作父级页面。通过switch_to.frame()进入子页面

browser.get(url)

brower.swich_to.frame('iframeResult')

7、延时等待
隐式等待:没有找到节点会等待一定时间再去查找        implicitly_wait()

from selenium import webdriver

browser = webdriver.Chrome()
browser.implicitly_wait(10)
browser.get('https://www.zhihu.com/explore')
inputs = browser.find_element_by_class_name('zu-top-add-question')
print(inputs)
显示等待:指定一个最长等待时间,如果在规定时间内加载出来就返回查找节点;到了规定时间依然没有加载出来的话就抛出超时异常。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

browser = webdriver.Chrome()
browser.get('https://www.taobao.com')
wait = WebDriverWait(browser,10) #实例化对象
inputs = wait.until(EC.presence_of_element_located((By.ID,'q')))
button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,'.btn-search')))
print(inputs,button,sep='\n')
title_is #标题是某内容
title_contains #标题包含某内容
presence_of_element_located #加点加载出来传入定位元组
url_contains
url_matches
url_to_be
url_changes
visibility_of_element_located #节点可见传入定位元组
visibility_of #可见传入节点对象
presence_of_all_elements_located #所有节点加载出来
visibility_of_any_elements_located
visibility_of_all_elements_located
text_to_be_present_in_element #某个节点文本包含某文字
text_to_be_present_in_element_value #某个节点值包含某文字
frame_to_be_available_and_switch_to_it #加载并切换
invisibility_of_element_located #节点不可见
invisibility_of_element
element_to_be_clickable #节点可点击
staleness_of #判断一个节点是否仍在DOM,可用来判断刷新
element_to_be_selected #节点可选择,传入节点对象
element_located_to_be_selected #节点可选择,传入定位元组
element_selection_state_to_be #传入节点对象以及状态,相等返回true,否则false
element_located_selection_state_to_be #传入定位元组以及状态,相等返回true,否则false
number_of_windows_to_be
new_window_is_opened
alert_is_present #是否出现警告

8、前进与后退
浏览器的前进与后退功能--back()/forward()

from selenium import webdriver
import time

browser = webdriver.Chrome()
browser.get('https://www.baidu.com')
browser.get('https://www.taobao.com')
browser.get('https:..www.zhihu.com')
browser.back()
time.sleep(1)
browser.forward()
9、Cookies
from selenium import webdriver

browser = webdriver.Chrome()
browser.get('https://www.zhihu.com/explore')
print(browser.get_cookies())
browser.add_cookie({'name':'name','domain':'www.zhihu.com','value':'sdfwer'})
#cookie至少需要name和value两个key。
print(browser.get_cookies())
browser.delete_all_cookies()
print(browser.get_cookies())
10、操作标签页
from selenium import webdriver
import time

browser = webdriver.Chrome()
browser.get('https://www.baidu.com')
browser.execute_script('window.open()') #在选项卡打开新页面
browser.switch_to.window(browser.window_handles[1]) #切换
browser.get('https://www.taobao.com')
browser.switch_to.window(browser.window_handles[0])
# browser.close() #关闭当前页
time.sleep(1)
browser.quit() #关闭所有页面并退出
11、异常处理
from selenium import webdriver
from selenium.common.exceptions import TimeoutException,NoSuchElementException

browser = webdriver.Chrome()
try:
browser.get('https:www.baidu.com')
except TimeoutException:
print('Time out')
try:
browser.find_element_by_class_name('lsd')
except NoSuchElementException:
print('No such elemnt')
finally:
browser.close()

————————————————
版权声明:本文为CSDN博主「Marvin_Wind」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Marvin_Wind/article/details/86004937

猜你喜欢

转载自www.cnblogs.com/logol/p/12048018.html