Web应用程序测验的东西selenium用法详解

selenium首要是用来做主动化测验,支撑多种阅读器,爬虫中首要用来处理JavaScript烘托问题。

模仿阅读器进行网页加载,当requests,urllib无法正常获取网页内容的时分

一、声明阅读器方针

留意点一,Python文件名或许包名不要命名为selenium,会导致无法导入

from selenium import webdriver
#webdriver能够认为是阅读器的驱动器,要驱动阅读器有必要用到webdriver,支撑多种阅读器,这儿以Chrome为例
browser = webdriver.Chrome()

二、拜访页面并获取网页html

from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.taobao.com')
print(browser.page_source)#browser.page_source是获取网页的悉数html
browser.close()

三、查找元素

单个元素

from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.taobao.com')
input_first = browser.find_element_by_id('q')
input_second = browser.find_element_by_css_selector('#q')
input_third = browser.find_element_by_xpath('//*[@id="q"]')
print(input_first,input_second,input_third)
browser.close()

常用的查找办法

find_element_by_name

find_element_by_xpath

find_element_by_link_text

find_element_by_partial_link_text

find_element_by_tag_name

find_element_by_class_name

find_element_by_css_selector

也能够运用通用的办法

from selenium import webdriver
from selenium.webdriver.common.by import By
browser = webdriver.Chrome()
browser.get('https://www.taobao.com')
input_first = browser.find_element(BY.ID,'q')#第一个参数传入称号,第二个传入具体的参数
print(input_first)
browser.close()

多个元素,elements多个s

input_first = browser.find_elements_by_id('q')


四、元素交互操作-查找框传入关键词进行主动查找

from selenium import webdriver
import time
browser = webdriver.Chrome()
browser.get('https://www.taobao.com')
input = browser.find_element_by_id('q')#找到查找框
input.send_keys('iPhone')#传送入关键词
time.sleep(5)
input.clear()#清空查找框
input.send_keys('男人内裤')
button = browser.find_element_by_class_name('btn-search')#找到查找按钮
button.click()

更多操作: http://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.remote.webelement#能够有特点、截图等等


五、交互动作,驱动阅读器进行动作,模仿拖拽动作,将动作附加到动作链中串行履行

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')#切换到iframeResult结构
source = browser.find_element_by_css_selector('#draggable')#找到被拖拽方针
target = browser.find_element_by_css_selector('#droppable')#找到方针
actions = ActionChains(browser)#声明actions方针
actions.drag_and_drop(source, target)
actions.perform()#履行动作

更多操作: http://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.common.action_chains

六、履行JavaScript

有些动作或许没有供给api,比方进度条下拉,这时,咱们能够经过代码履行JavaScript

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 Bottom")')

七、获取元素信息

获取特点

from selenium import webdriver
from selenium.webdriver import ActionChains
browser = webdriver.Chrome()
url = 'https://www.zhihu.com/explore'
browser.get(url)
logo = browser.find_element_by_id('zh-top-link-logo')#获取网站logo
print(logo)
print(logo.get_attribute('class'))
browser.close()

获取文本值

from selenium import webdriver
browser = webdriver.Chrome()
url = 'https://www.zhihu.com/explore'
browser.get(url)
input = browser.find_element_by_class_name('zu-top-add-question')
print(input.text)#input.text文本值
browser.close()

# 获取Id,方位,标签名,巨细

from selenium import webdriver
browser = webdriver.Chrome()
url = 'https://www.zhihu.com/explore'
browser.get(url)
input = browser.find_element_by_class_name('zu-top-add-question')
print(input.id)#获取id
print(input.location)#获取方位
print(input.tag_name)#获取标签名
print(input.size)#获取巨细
browser.close()

八、Frame操作

frame相当于独立的网页,假如在父类网frame查找子类的,则有必要切换到子类的frame,子类假如查找父类也需求先切换

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
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')
print(source)
try:
    logo = browser.find_element_by_class_name('logo')
except NoSuchElementException:
    print('NO LOGO')
browser.switch_to.parent_frame()
logo = browser.find_element_by_class_name('logo')
print(logo)
print(logo.text)

九、等候

隐式等候

当运用了隐式等候履行测验的时分,假如 WebDriver没有在 DOM中找到元素,将持续等候,超出设定时刻后则抛出找不到元素的反常,

换句话说,当查找元素或元素并没有当即呈现的时分,隐式等候将等候一段时刻再查找 DOM,默许的时刻是0

from selenium import webdriver
browser = webdriver.Chrome()
browser.implicitly_wait(10)#等候十秒加载不出来就会抛出反常,10秒内加载出来正常回来
browser.get('https://www.zhihu.com/explore')
input = browser.find_element_by_class_name('zu-top-add-question')
print(input)


显式等候

指定一个等候条件,和一个最长等候时刻,程序会判别在等候时刻内条件是否满意,假如满意则回来,假如不满意会持续等候,超越时刻就会抛出反常

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)
input = wait.until(EC.presence_of_element_located((By.ID, 'q')))
button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.btn-search')))
print(input, button)

title_is 标题是某内容

title_contains 标题包括某内容

presence_of_element_located 元素加载出,传入定位元组,如(By.ID, 'p')

visibility_of_element_located 元素可见,传入定位元组

visibility_of 可见,传入元素方针

presence_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 frame加载并切换

invisibility_of_element_located 元素不行见

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

alert_is_present 是否呈现Alert


具体内容:http://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.support.expected_conditions


十一、行进撤退-完成阅读器的行进撤退以阅读不同的网页

import time
from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.baidu.com/')
browser.get('https://www.taobao.com/')
browser.get('https://www.python.org/')
browser.back()
time.sleep(1)
browser.forward()
browser.close()


十二、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': 'germey'})
print(browser.get_cookies())
browser.delete_all_cookies()
print(browser.get_cookies())

选项卡办理 添加阅读器窗口

import time
from selenium import webdriver
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(1)
browser.switch_to_window(browser.window_handles[0])
browser.get('http://www.fishc.com')

十三、反常处理

from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.baidu.com')
browser.find_element_by_id('hello')
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_id('hello')
except NoSuchElementException:
    print('No Element')
finally:
    browser.close()

# 具体文档:http://selenium-python.readthedocs.io/api.html#module-selenium.common.exceptions


上一篇:Python 代码混杂和加密技能
下一篇:Python3完成旋转数组的3种算法

PythonTab微信大众号:

Python技能交流合作群 ( 请勿加多个群 ):

群1: 87464755

群2: 333646237

群3: 318130924

群4: 385100854