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()
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值