selenium css樣式選擇器用例

有圖有派 2021-08-15 15:34:55 阅读数:600

本文一共[544]字,预计阅读时长:1分钟~
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')

版权声明:本文为[有圖有派]所创,转载请带上原文链接,感谢。 https://gsmany.com/2021/08/20210815153452396s.html