selenium css样式选择器用例
'''
2021年8月9日
https://www.bilibili.com/video/BV1ut4y1B7CX?p=50&spm_id_from=pageDriver
第50讲、day7:03.selenium其他自动化操作
'''
# import time
# from selenium import webdriver
# from lxml import etree
# bro=webdriver.Chrome('./chromedriver.exe')#实例化一个浏览器对象
# bro.get('https://www.taobao.com')#让浏览器发发起一个对应的请求
# page_text=bro.page_source#获取浏览器当前页面的页面源码数据
# tree=etree.HTML(page_text)
# import time
# from selenium import webdriver
# bro=webdriver.Chrome('./chromedriver.exe')
# bro.get('https://taobao.com')
# search_input=bro.find_element_by_id('q')#定位搜索框的元素
# search_input.send_keys('沙发')#输入要搜索的关键字
# bro.execute_script('window.scrollTo(0,document.body.scrollHeight)')#根据屏幕将滚动条滚到最下面
# time.sleep(2)
# btn=bro.find_element_by_xpath('//div[@class="search-button"]/button[@type="submit"]')#根据class定位到搜索按钮
# btn.click()#表示点击搜索按钮
# time.sleep(5)
# bro.quit()#退出浏览器
# #window.scrollTo(0,document.body.scrollHeight)#根据屏幕将滚动条滚到最下面
import time
'''
技术总结:
selenium使用流程:
第一、导入selenium库的webdriver模块:from selenium import webdriver
第二、实例化浏览器对象:bro=webdriver.Chrome('./chromedriver.exe')
第三、发起请求:bro.get('http://taobao.com')
第四、标签定位:search_input=bro.find_element_by_id('q')…………
第五、标签交互:search_input.send_keys('沙发')………………
第六、执行JS程序:bro.execute_script('window.scrollTo(0,document.body.scrollHeight)')#根据屏幕将滚动条滚到最下面
第七、前进、后退:back()、forward()
第八、关闭浏览器:quit()
'''
'''
2021年8月9日练习
'''
# import time
# from selenium import webdriver
# bro=webdriver.Chrome('./chromedriver.exe')#
# bro.get('http://taobao.com')
# search_input=bro.find_element_by_id('q').send_keys('沙发')
# btn=bro.find_element_by_class_name('btn-search').click()
# time.sleep(3)
# bro.quit()
# import time
# from selenium import webdriver
# bro=webdriver.Chrome('./chromedriver.exe')
# bro.get('https://www.tmall.com/')
# srarch_text=bro.find_element_by_name('q')
# time.sleep(3)
# srarch_text.send_keys('儿童文学')
# btn=bro.find_element_by_xpath('//button[@type="submit"]')
# btn.click()
# time.sleep(2)
# bro.quit()
# import time#
# from selenium import webdriver
# bro=webdriver.Chrome('./chromedriver.exe')
# bro.get('http://www.baidu.com')
# seacher_textbox=bro.find_element_by_xpath('//input[@id="kw"]')
# seacher_textbox.send_keys('python')
# btn=bro.find_element_by_xpath('//input[@value="百度一下"]')
# time.sleep(2)
# btn.click()
# time.sleep(3)
# bro.quit()
'''
2021年8月10日
selenium处理iframe
若果定位的标签存在于iframe内,则必须使用switch_to.frmae(id).
动作链(拖动):from selenium.webdriber import ActionChains
实例化一个动作量对象 action=ActionChains(bro)
click_and_hold表示长安且点击操作
move_by_offset(x.y)
perform()让动作链立即执行
release()释放动作链
'''
# from selenium import webdriver
# from selenium.webdriver import ActionChains#导入动作量对应的类
# bro=webdriver.Chrome('chromedriver.exe')#实例化浏览器
# bro.get('https://www.runoob.com/tyr/tyr.php?filename=jqueryui-api-droppable')#发送请求
# #如果定位的标签是存在于iframe标签内的,则需要通过如下操作进行标签定位:
# bro.switch_to.frame('iframeResult')#切花浏览器标签定位的作用域,进入iframe
# div=bro.find_element_by_id('draggable')
# action=ActionChains(bro)#动作链
# action.click_and_hold(div)
# for i in range(5):
# action.move_by_offset(17,0).perform()#perform立即执行动作量操作.共有2个参数,x表示水平方向,y表示钟方向
# time.sleep(0.3)
# action.release()#动作量释放
# bro.quit()#关闭浏览器
'''
2021年8月10日
用selenium模拟QQ空间登录
'''
# from selenium import webdriver
# bro=webdriver.Chrome('chromedriver.exe')
# bro.get('https://qzone.qq.com/')
# bro.switch_to.frame('login_frame')#进入到iframe标签中
# login_url=bro.find_element_by_id('switcher_plogin')#定位‘账号密码登录'链接
# time.sleep(2)
# login_url.click()#点击该链接
# unt=bro.find_element_by_id('u')#定位用户名
# pwt=bro.find_element_by_id('p')#定位密码
# unt.send_keys('292754708')#输入QQ号
# pwt.send_keys('zh226200sh1')#输入密码
# login_btn=bro.find_element_by_id('login_button')#定位’登录‘按钮
# time.sleep(2)
# login_btn.click()#点击’登录‘按钮
# time.sleep(3)
# bro.quit()#关闭浏览器
'''
练习
用selenium登录126邮箱
'''
# from selenium import webdriver#导入selenium的webderiver库
# bro=webdriver.Chrome('chromedriver.exe')#指定浏览器
# bro.get('http://www.jszwfw.gov.cn/jsjis/front/login.do')#打开网站
# close_frame=bro.find_element_by_class_name('button-close')#定位元素
# close_frame.click()#点击按钮
# username=bro.find_element_by_id('grusername').send_keys('123')#定位元素并输入用户名及用户名
# pwd=bro.find_element_by_id('grpwd').send_keys('456')#定位元素并输入密码
# loginbtn=bro.find_element_by_class_name('login_lg')#定位‘登录’按钮
# time.sleep(3)#等待3秒后执行下面的程序
# loginbtn.click()#点击‘登录’按钮
'''
2021年8月10日
无头浏览器---让可视化界面消失不可见
需要导入:
from selenium.webdriver.chrome.options import Options
chrome_options=Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
在实例化浏览器的时,需要添加无头浏览器的参数options=chrome_options
实现规避selenium被对方服务器检测到的风险,需要导入:
from selenium.webdriver import ChromeOptions库
option=ChromeOptions()
option.add_experimental_option('excludeSwitches',['enable-automation'])
在实力化浏览器的时,需要添加无头浏览器的参数options=options
'''
# from selenium import webdriver
# from selenium.webdriver.chrome.options import Options#实现无可视化界面的类库
# from selenium.webdriver import ChromeOptions#实现selenium被检测到的风险
# #让谷歌浏览器变为无头浏览器即可视化界面不可见。
# chrome_options=Options()
# chrome_options.add_argument('--headless')
# chrome_options.add_argument('--disable-gpu')
#
# #如何让selenium规避被检测到的风险
# options=ChromeOptions()
# options.add_experimental_option('excludeSwitches',['enable-automation'])
# bro=webdriver.Chrome(executable_path='./chromedriver.exe',chrome_options=chrome_options,options=options)#添加无头浏览器的参数chrome_opeions以及规避风险参数Options
# bro.get('http://www.baidu.com')#发送请求
# print(bro.page_source)#打印请求到的源码
'''
2021年8月10日
超级鹰的基本使用
使用selenium模拟登录12306,该网站有验证内容的.
超级鹰 http://www.chaojiying.com/
1、注册超级鹰账户
2、登录超级鹰
3、充1块钱
4、创建一个软件(获取ID)
5、下载示例代码
流程:
--使用selenium打开页面
--对当前selenium打开的这张图片进行截图
--对当前局部区域(验证码图片)进行截图
--好处:将验证码图片和模拟登录进行一一对应
--使用超级鹰识别验证码图片的坐标
测试图片的坐标: 117,71|182,123
'''
# from selenium import webdriver
# bro=webdriver.Chrome('chromedriver.exe')
# bro.get('https://kyfw.12306.cn/otn/resources/login.html')
# login_url=bro.find_element_by_xpath('//li[@class="login-hd-account"]/a[@href]')
# login_url.click()
'''
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'''
# from selenium import webdriver
# bro=webdriver.Chrome()
# bro.get('https://www.baidu.com')
# bro.implicitly_wait(3)#隐式等待,等待页面上的元素被浏览器渲染出来。
# # input_text_box=bro.find_element_by_id('kw').send_keys('python')#根据ID号定位元素
# # seach_btn=bro.find_element_by_id('su').click()#找到按钮后点击,开始搜索
# # spannews=bro.find_elements_by_tag_name('span')#根据标签查找
# # for spannew in spannews:
# # print(spannew.text)
# input_text_b0x=bro.find_element_by_id('kw').send_keys('python')
# search_btn=bro.find_element_by_id('su').click()
# texts=bro.find_elements_by_class_name('c-gap-top')
# for text in texts:
# print(text.text)
# bro.quit()
# from selenium import webdriver
# bro=webdriver.Chrome()
# bro.get('http://www.baidu.com')
# bro.implicitly_wait(2)
# input_text_box=bro.find_element_by_id('kw').send_keys('selenium web自动化测试')
# scacher_btn=bro.find_element_by_id('su').click()
# className=bro.find_element_by_class_name('c-color-gray2')
# print(className.get_attribute('class'))#获取属性值
# bro.quit()
'''
========================================================================================================================
2021年8月13日
以下是使用css选择器选中元素NO.1
'''
# from selenium import webdriver
# bro=webdriver.Chrome()
# bro.get('http://cdn1.python3.vip/files/selenium/sample1.html')
# bro.implicitly_wait(2)
# # plant=bro.find_element_by_css_selector('.plant')#根据CSS选择器选择单个元素的值。如果存在多个,而在表达式中没有使用elements(即没有使用复数形式则返回的是该元素的第一个值)
# plants=bro.find_elements_by_css_selector('.plant')#如果在表达式中使用复数形式即elements,则返回的是列表形式。
# for plant in plants:
# print(plant.text)
# animals=bro.find_elements_by_css_selector('.animal')
# for animal in animals:
# print(animal.text)
'''
========================================================================================================================
2021年8月13日
以下是使用css选择器选中元素NO.2
根据ID号定位元素,则需要在ID的值前加井号
'''
# from selenium import webdriver
# bro=webdriver.Chrome()
# bro.get('http://cdn1.python3.vip/files/selenium/sample1.html')
# bro.implicitly_wait(2)#隐式等待。等待页面的元素全部加载
# test_box=bro.find_element_by_css_selector('#searchtext').send_keys('这里有好吃的')
# time.sleep(2)
# bro.quit()
'''
========================================================================================================================
2021年8月13日
以下是使用css选择器选中元素NO.3
可以用大于号(>)或一个(或多个)空格选择css样式选择器的直接子节点或孙子节点
大于号与空格可以混用.
'''
# from selenium import webdriver
# bro=webdriver.Chrome()
# bro.implicitly_wait(2)
# bro.get('http://cdn1.python3.vip/files/selenium/sample1.html')
# plants=bro.find_elements_by_css_selector('.plant>span')
# for plant in plants:
# print(plant.text)
# print('==============================================')
# animals=bro.find_elements_by_css_selector('.animal>span')#返回列表
# for animal in animals:
# print(animal.text)
# info=bro.find_element_by_css_selector('#bottom a')
# print(info.text)
# info1=bro.find_element_by_css_selector('#bottom>.footer2 a')#混用的情况
# print(info1.text)
# time.sleep(5)
# bro.quit()
'''
========================================================================================================================
2021年8月14日
以下是使用css选择器选中元素NO.4
'''
# from selenium import webdriver
# import re
# bro=webdriver.Chrome()
# bro.get('http://cdn1.python3.vip/files/selenium/sample1.html')
# bro.implicitly_wait(2)
# link_text=bro.find_element_by_css_selector('[href]')
# print(link_text.get_attribute('outerHTML'))
# selenium元素定位加字符串处理
'''
========================================================================================================================
2021年8月14日
以下是使用css选择器选中元素NO.4
选择某一个子节点的方法
取某一子节点例子:#t1 p:nth-child(5),其中()中的数字是相对于父节点而言的
'''
# from selenium import webdriver
# import re
#
# bro = webdriver.Chrome()
# bro.get('http://cdn1.python3.vip/files/selenium/sample1a.html')
# bro.implicitly_wait(2)
#
# author1 = ''.join(bro.find_element_by_css_selector('#t1 span:nth-child(2)').text) # 取'李白'
# link_text1 = ''.join(bro.find_element_by_css_selector('#t1 p:nth-child(3)').text) # 取李白的诗。选择ID为t1的p节点的最后一个节点
#
# author2 = ''.join(bro.find_element_by_css_selector('#t1 span:nth-child(4)').text) # 取‘杜甫‘选择兄弟节点
# link_text2 = ''.join(bro.find_element_by_css_selector('#t1 p:nth-child(5)').text) # 取李白的诗。选择ID为t1的p节点的最后一个节点
#
# author3 = ''.join(bro.find_element_by_css_selector('#t2 span').text) # 取‘幸弃疾‘选择兄弟节点
# link_text3 = ''.join(bro.find_element_by_css_selector('#t2 p').text) # 取李白的诗。选择ID为t1的p节点的最后一个节点
#
# print(author1, '---《', link_text1, '》\n', author2, '---《', link_text2, '》\n', author3, '---《', link_text3, '》',
# sep='') # 用于print两个元素时自定义间隔符(默认为两个空格)关键字参数sep是实现分隔符,比如多个参数输出时想要输出中间的分隔字符。print(1, 2, 3, sep = ',', end = '')
# str = "0000000 this is string example....wow!!!0000000,"
# print(str.strip('0').strip().replace('0',''))
'''
========================================================================================================================
2021年8月15日
以下是内嵌网页iframe的操作,包含了切入iframe和切出iframe操作
要成功切入内嵌的网页可以使用浏览器对象.switch_to.frame(参数是iframe的id或name或该iframe的其他特征值)方法切入
在使用其他特征值切入到iframe中使用:
bro.switch_to.frame(bro.find_element_by_css_selector('[src="sample1.html"]'))
官网:http://www.byhy.net/
'''
# from selenium import webdriver
# bro=webdriver.Chrome()
# bro.get('http://cdn1.python3.vip/files/selenium/sample2.html')
# bro.implicitly_wait(2)
# #切入Iframe内嵌网页,可以使用ID属性的值切入
# # bro.switch_to.frame('frame1')
# print('第一次成功使用iframe的ID属性值切入iframe.')
# #或者可以使用name属性的值也可以切入到iframe内嵌网页内
# bro.switch_to.frame('innerFrame')
# plants=bro.find_elements_by_css_selector('.plant>span')
# for plant in plants:
# print(plant.text)
# print('第一次成功使用iframe的name属性值切入iframe.')
# animals=bro.find_elements_by_css_selector('.animal>span')
# for animal in animals:
# print(animal.text)
# bro.switch_to_default_content()#执行这条语句的时候,Python发出一个警告,说不赞成这么做,我也在找解决的方法,如果你看到了,可以留个言给我,不胜感激.
# print('第一次成功切出iframe内嵌网页')
# btn=bro.find_element_by_css_selector('#outerbutton').click()
# print('第一次成功切出iframe后点击主页面的button命令触发的打印')
# #如果在Iframe中既没有ID也没有name属性,则可以使用该标签中任意一个属性值,也可以切入到内嵌网页中,比如可以使用src属性,但前提条件是该特征值必须是在整个加载网页中是唯一的。
# bro.switch_to.frame(bro.find_element_by_css_selector('[src="sample1.html"]'))
# print('成功使用iframe的其他特征属性值切入iframe.')
# bro.switch_to_default_content()#执行这条语句的时候,Python发出一个警告,说不赞成这么做,我也在找解决的方法,如果你看到了,可以留个言给我,不胜感激.
# bro.switch_to.frame('frame1')
# print('第二次成功切入iframe内嵌网页')
# layers01=bro.find_elements_by_css_selector('#layer1 span')
# for layer01 in layers01:
# print(layer01.text)
# layers02=bro.find_elements_by_css_selector('#layer2 span')
# for layer02 in layers02:
# print((layer02.text))
# footers1=bro.find_elements_by_css_selector('.footer1 span')
# for footer1 in footers1:
# print(footer1.text)
# footer2=bro.find_element_by_css_selector('.footer2 span')
# print(footer2.text)
# footer2_a=bro.find_element_by_css_selector('.footer2 a')
# print(footer2_a.text)
# bro.switch_to_default_content()#执行这条语句的时候,Python发出一个警告,说不赞成这么做,我也在找解决的方法,如果你看到了,可以留个言给我,不胜感激.
# print('第二次成功切出iframe')
江苏省启东市汇龙镇scratch、python上门一对一专业辅导,微信:double_sings(加好友请备注来意,谢谢)