加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
study_selenium.py 6.50 KB
一键复制 编辑 原始数据 按行查看 历史
peter 提交于 2020-04-13 19:03 . selenium的系统学习
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author   : running_fish
# @Time     : 2020/4/8 0008 下午 17:24
# @File     : study_selenium.py
# @Software : PyCharm
from selenium import webdriver
from selenium.webdriver import ActionChains
# 定位一个元素
brower = webdriver.Chrome('E:\download_all\chromedriver.exe')
# source = brower.get('https://www.taobao.com') # 获取淘宝页面内容
# brower.find_element_by_id('q') # 获取q元素内容
driver = webdriver.Chrome('E:\download_all\chromedriver.exe')
driver.get('F:\python_learning\\temp-0108\learning_selenium\\test.html')
# 页面源代码如下
'''
<html>
<body>
<form id="loginForm">
<input name="username" type="text" />
<input name="password" type="password" />
<input name="continue" type="submit" value="Login" />
<input name="continue" type="button" value="Clear" />
</form>
</body>
<html>
'''
login_form = driver.find_element_by_id("loginForm") # 通过id定位元素
username = driver.find_element_by_name('username') # 通过name定位元素
password = driver.find_element_by_name('password')
continue_ = driver.find_element_by_name('continue')
# 通过xpath的绝对路径 得到元素
login_form = driver.find_element_by_xpath('/html/body/form[1]')
login_form = driver.find_element_by_xpath('//from[1]')
login_form = driver.find_element_by_xpath('//form[@id="loginForm"]')
# 通过xpath的相对路径 得到元素
username = driver.find_element_by_xpath('//form[input/@name="username"]')
username = driver.find_element_by_xpath('form[@id="loginForm"]/input[1]')
username = driver.find_element_by_xpath('//input[@name="username"]')
clear_button = driver.find_element_by_xpath('//input[@name="continue"][@ytpe="button"]')
clear_button = driver.find_element_by_name('//form[@id="loginForm"]/input[4]')
# 通过链接的文本内容来定位元素
driver.get('F:\python_learning\\temp-0108\learning_selenium\\test_2\html')
# 页面源代码 如下
''''
<html>
<body>
<p>Are you sure you want to do this?</p>
<a href="continue.html">Continue</a>
<a href="cancel.html">Cancel</a>
</body>
<html>
'''
continue_link = driver.find_element_by_link_text("Continue")
continue_link = driver.find_element_by_link_text("Conti") # 可截取部分内容匹配
# 页面源代码如下
'''
<html>
<body>
<h1>Welcome</h1>
<p>Site content goes here.</p>
</body>
<html>
'''
heading = driver.find_element_by_tag_name('h1') # 返回给定标签名的第一个元素
# 页面源代码如下
''''
<html>
<body>
<p class="content">Site content goes here.</p>
</body>
<html>
'''
content = driver.find_element_by_name('content') # 返回具有匹配属性名称的第一个元素
content = driver.find_element_by_css_selector('p.content')
# 动作链
menu = driver.find_element_by_css_selector(".nav")
hidden_submenu = driver.find_element_by_css_selector(".#nav #submenu1")
actions = ActionChains(driver)
actions.move_to_element(menu)
actions.click(hidden_submenu)
actions.perform()
actions.key_down(Keys.CONTROL).send_keys('c')).key_up(Keys.CONTROL).perform()
# 某些操作,seleniumAPI没有提供,可以用execute_script()方法来实现,代码如下
brower = webdriver.Chrome('E:\download_all\chromedriver.exe')
brower.get('https://www.zhihu.com/explore')
brower.execute_script('window.scrollTo(0,document.body.scrollHeight)')
brower.execute_script('alert("To Bottom")')
# 获取节点信息
browser = webdriver.Chrome('E:\download_all\chromedriver.exe')
browser.get(url)
input = browser.find_element_by_id('zu-top-add-question')
print(input.get_attribute()) # 获取属性
print(input.text) # 获取文本
print(input.id) # 获取id
print(input.location) # 获取位置
print(input.tag_name) # 获取标签名
print(input.size) # 获取大小
# 获取页面的子页面 需要使用switch_to.frame()
url = ''
browser.get(url)
browser.switch_to_frame('iframeResult') # 进入指定的页面'iframeResult'
browser.switch_to_window('window_name') # 切换到指定的window_name页面
browser.switch_to_alert() # 切换到alert弹窗
browser.switch_to_active_element() # 定位到当前聚焦的元素上
browser.switch_to_default_content # 切换到最上层页面
browser.switch_to_frame(frame_reference='') # 通过id,name,element(定位的某个元素),索引来切换某个frame
browser.switch_to.parent_frame() # 退回到上一层某个frame, 对于层层嵌套的frame很有用
try:
logo = browser.find_element_by_name("logo")
except NoSuchElementException:
print('NO LOGO')
# 隐式等待和显式等待
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
browser.implicitly_wait(10) # 隐式等待10秒 默认是0秒
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'))
'''
判断条件:
title_is 标题是某内容
title_contains 标题包含某内容
presence_of_element_located 节点加载起来,传入定位元组,如By.ID,'p'
visibility_of_element_located 节点可见,传入定位元组
visibility_of 可见,传入节点对象
presence_of_all_element_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 节点不可见
element_to_be_clickable 节点可点击
staleness_of 判断一个节点是否然在DOM,可判断页面是否已经刷新
element_to_be_selected 节点可选择,传节点对象
element_located_to_be_selected 节点可选择,传节点定位元组
element_selection_state_to_be 传入节点对象及状态,相等返回True,否则返回False
elemnet_laocated_selection_state_to_be 传入定位元组及状态,相等返回True,否则返回False
alert_is_persent 是否出现警告
'''
# 浏览器中的选项卡管理
browser.get(url)
browser.execute.script('window.open()') # 开启新的选项卡
print(browser.window_handles) # 打印出所有的选项卡
browser.switch_to_window(browser.window_handles[1]) # 切换想要进入的选项卡
# 异常处理
from selenium import webdriver
from selenium.common.exceptions import TimeoutException, NoSuchElementException
browser = webdriver.Chrome()
try:
browser.get(url)
except TimeoutException:
print('Time Out')
try:
browser.find_element_by_id('hello')
except NoSuchElementException:
print('No Element')
finally:
browser.close()
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化