#!/usr/bin/env python
# -*- coding:utf-8 -*-
from selenium import webdriver
import time
import urllib.parse
from selenium.webdriver.common.keys import Keys
from selenium.webdriver import ActionChains
from selenium.webdriver.support.ui import Select
from selenium.webdriver.common.by import By
# WebDriverWait 库,负责循环等待
from selenium.webdriver.support.ui import WebDriverWait
# expected_conditions 类,负责条件出发
from selenium.webdriver.support import expected_conditions as EC
try:
# selenium 开始不再支持 phantomJSdriver 可以改用 chromedriver geckodriver
# driver = webdriver.PhantomJS(r"D:\Program Files (x86)\phantomjs-2.1.1-windows\bin\phantomjs.exe")
driver = webdriver.Chrome()
# driver = webdriver.Firefox()
# driver.get("https://www.baidu.com/")
# 获取Cookie的值
# print(driver.get_cookies()) #获取所有cookie
# [{'domain': '.baidu.com', 'expiry': 3721097795.504459, 'httpOnly': False, 'name': 'PSTM', 'path': '/', 'secure': False, 'value': '1573614131'}, {'domain': '.baidu.com', 'expiry': 3721097795.504422, 'httpOnly': False, 'name': 'BIDUPSID', 'path': '/', 'secure': False, 'value': '9B538A4E3A7D4B22CF1185EF64425B3F'}, {'domain': '.baidu.com', 'httpOnly': False, 'name': 'H_PS_PSSID', 'path': '/', 'secure': False, 'value': '1429_21122_18560_29568_29699_29220_26350'}, {'domain': '.baidu.com', 'httpOnly': False, 'name': 'delPer', 'path': '/', 'secure': False, 'value': '0'}, {'domain': '.baidu.com', 'expiry': 1605150148.504504, 'httpOnly': False, 'name': 'BAIDUID', 'path': '/', 'secure': False, 'value': '9B538A4E3A7D4B2289973E0090B4E8A2:FG=1'}, {'domain': 'www.baidu.com', 'httpOnly': False, 'name': 'BD_HOME', 'path': '/', 'secure': False, 'value': '0'}, {'domain': '.baidu.com', 'expiry': 1573700548.782194, 'httpOnly': False, 'name': 'BDORZ', 'path': '/', 'secure': False, 'value': 'B490B5EBF6F3CD402E515D22BCDA1598'}, {'domain': 'www.baidu.com', 'expiry': 1574478148, 'httpOnly': False, 'name': 'BD_UPN', 'path': '/', 'secure': False, 'value': '12314753'}]
# print(driver.get_cookie("PSTM")) #获取name为某值的cookie
# {'domain': '.baidu.com', 'expiry': 3721097795.504459, 'httpOnly': False, 'name': 'PSTM', 'path': '/', 'secure': False, 'value': '1573614131'}
# 设置值
# driver.find_element_by_id("kw").send_keys("王者荣耀")
# 模拟全选
# driver.find_element_by_id("kw").send_keys(Keys.CONTROL , "a")
# 模拟剪切
# driver.find_element_by_id("kw").send_keys(Keys.CONTROL , 'x')
# 重新输入
# driver.find_element_by_id("kw").send_keys("豆瓣电影")
# 模拟 enter键盘事件
# driver.find_element_by_id("su").send_keys(Keys.ENTER)
# 鼠标点击
# Message: no such element: Unable to locate element
# driver.find_element_by_xpath("//form[@id='form']/span[@id='s_btn_wr']/input[@id='su']").click()
# driver.find_element_by_id("su").click()
# 等待两秒
# time.sleep(2)
# 截屏
# driver.save_screenshot("baidu.png")
# 获取属性title、page_source、current_url
# print(driver.title) #王者荣耀_百度搜索
# print(driver.page_source) #打印网页渲染后的源代码
# print(driver.current_url)
# print(urllib.parse.unquote(driver.current_url , 'utf-8'))
''' 定位UI元素 (WebElements)
下的API 单个元素选取
find_element_by_id
find_elements_by_name
find_elements_by_xpath
find_elements_by_link_text
find_elements_by_partial_link_text
find_elements_by_tag_name
find_elements_by_class_name
find_elements_by_css_selector
'''
# driver.find_element_by_name("wd").send_keys("西游记")
# driver.find_element_by_xpath("//input[@id='kw']").send_keys("东游记")
# driver.find_element_by_class_name("s_ipt").send_keys("周杰伦")
# driver.find_element_by_link_text("hao123").click() #根据超链接文本查找
# driver.find_element_by_partial_link_text("123").click() #根据超链接文本的部分文字内容查找
# driver.find_element_by_css_selector("#kw").send_keys("doinb") #根据css选择器查找
# time.sleep(1)
# driver.save_screenshot("baidu.png")
'''
鼠标动作链
(单击 click 、双击 double_click 、右击 context_click 、左键hold住 click_and_hold、拖拽 drag_and_drop等)
move_by_offset
'''
# driver.get("https://etax.shanxi.chinatax.gov.cn/login")
# driver.maximize_window() # 最大化窗口
# closeLayer = driver.find_element_by_id("closeLayer")
# ActionChains(driver).move_to_element(closeLayer).click().perform() #关闭弹窗
# login_btn = driver.find_element_by_id("login-btn")
# ActionChains(driver).move_to_element(login_btn).context_click().perform() #右击
# ActionChains(driver).move_to_element(login_btn).click().perform() # 单击登录按钮
# drag_btn = driver.find_element_by_class_name("drag-btn") # 获取滑块对象
# ActionChains(driver).move_to_element(drag_btn).click_and_hold().perform() #左键按住滑块
# ActionChains(driver).drag_and_drop_by_offset(drag_btn,268,0).perform() #对应起始位置的横坐标距离与纵坐标距离
# time.sleep(2)
# driver.save_screenshot("shuijv.png")
'''
填充表单
index 索引从 0 开始
value是option标签的一个属性值,并不是显示在下拉框中的值
visible_text是在option标签文本的值,是显示在下拉框的值
'''
# driver.get("http://tool.chacuo.net/cryptdes")
# driver.maximize_window() # 最大化窗口
# s = Select(driver.find_element_by_class_name("h30"))
# s.select_by_visible_text("CFB")
# s.select_by_index('2')
# s.select_by_value("cbc")
# time.sleep(2)
# driver.save_screenshot("select.png")
'''
弹窗处理 driver.switch_to.alert
accept() 点击Alert的【确认】按钮
authenticate(username,password) 给需要验证的Alert发送账号和密码,默认点击OK
dismiss() 点击Alert的【取消】按钮
send_keys(keysToSend) 在Alert的输入框输入信息
text 获取Alert上的文言信息
switch_to.alert 切换到Alert
'''
# driver.get("https://www.etax-gd.gov.cn/sso/login?service=https://www.etax-gd.gov.cn/xxmh/html/index_login.html?bszmFrom=1&t=1561426315919")
# driver.maximize_window()
# driver.find_element_by_class_name("layui-layer-btn1").click()
# time.sleep(1)
# driver.find_element_by_id("upLoginButton").click()
# time.sleep(1)
# driver.switch_to.alert().accept()
# driver.save_screenshot("alert.png")
'''
页面前进和后退
driver.forward() #前进
driver.back() # 后退
driver.refresh()
'''
# driver.get("https://www.runoob.com/python3/python3-func-zip.html")
# driver.maximize_window()
# driver.back()
# driver.forward()
# driver.refresh()
'''
页面等待: 隐式等待是等待特定的时间,显式等待是指定某一条件直到这个条件成立时继续执行。
1、显式等待
API如下:
title_is
title_contains
presence_of_element_located
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
invisibility_of_element_located
element_to_be_clickable – it is Displayed and Enabled.
staleness_of
element_to_be_selected
element_located_to_be_selected
element_selection_state_to_be
element_located_selection_state_to_be
alert_is_present
2、隐式等待
driver.implicitly_wait(10) # seconds 可理解为超时时间
'''
# 显式
driver.get("http://www.xxxxx.com/loading")
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "myDynamicElement"))
)
# 隐式
driver.implicitly_wait(10) # seconds
driver.get("http://www.xxxxx.com/loading")
myDynamicElement = driver.find_element_by_id("myDynamicElement")
except NameError as e:
print(e)
finally:
# 关闭浏览器 driver.close()关闭当前窗口 driver.quit()退出驱动关闭所有窗口
# driver.close()
driver.quit()
python Selenium学习笔记
最新推荐文章于 2024-05-08 08:48:16 发布