日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

选择、操作web元素-2

發布時間:2024/3/24 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 选择、操作web元素-2 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

11月3日

等待web元素的出現

例子:百度搜索松勤網,點擊操作后不等待頁面刷新,下面選擇頁面元素的時候,該元素還是未出現

sleep方案的弊病:固定的等待時間,導致測試用例執行時間很長

為什么click函數不像get函數等待頁面刷新?click未必會導致頁面更新,get一定會導致頁面更新

selenium解決方案:選擇一個元素的時候,代碼設定一個最大等待時長,周期性(每隔半秒鐘)重新尋找元素,直到該元素找到(返回),或者超出指定最大等待時長(返回空列表或者拋出異常),find_element_by都會循環等待

隱式等待:全局的設定,后面所有的選擇的代碼都不需要單獨的指定周期性等待了? driver.implicitly_wait(10)

也可以先設置10,若有特殊等待時間,在設置一個值(比如60),調用完畢后再改回來

顯示等待:為一個操作專門指定等待時間

from selenium.webdriver.support.ui import WebDriverWait

form selenium.webdriver.support import expected_conditions as EC

form selenium.webdriver.common.by import By

ele = WebDriverWait(driver,60).until(EC.presence_of_element_located((By.ID,'username')))

frame的處理

一個例子?:獲取網易云音樂排行榜信息?? http://music.163.com/#/discover/toplist?id=60198

什么是frame 和iframe? http://www.w3school.com.cn/html/html_iframe.asp

切換到frame里面

driver.switch_to.frame(frame_reference)

  frame元素的name屬性或者ID屬性

  索引值(從0開始):0

  frame所對應的WebElement:driver.find_element_by_tag_name("iframe")

切換回主html里面:driver.switch_to.default_content()

注意那些會變的ID

Selenium 作業 2

打開百度新歌榜, http://music.baidu.com/top/new在排名前50的歌曲中,找出其中排名上升的歌曲和演唱者注意: 有的歌曲名里面有 "影視原聲" 這樣的標簽, 要去掉 最終結果顯示的結果如下: 我不能忘記你 : 林憶蓮 等 : 嚴藝丹 飛天 : 云朵 粉墨 : 霍尊 春風十里不如你 : 李健








參考答案,往下翻

?

方法1

# coding:utf8 from selenium import webdriverdriver = webdriver.Chrome(r"d:\tools\webdrivers\chromedriver.exe") # driver.implicitly_wait(1) # 抓取排行榜信息 driver.get('http://music.baidu.com/top/new') # 層層往下查找 div = driver.find_element_by_id("songListWrapper") ul = div.find_element_by_tag_name("ul") #這行可以省略 liList = ul.find_elements_by_tag_name('li') for li in liList: # 哪些 是有 有up 標簽的 歌曲, F12 查看特性 upTags = li.find_elements_by_class_name("up") if upTags: # 由于只要 歌曲名和 演唱者名 title = li.find_element_by_class_name("song-title") titleStr = title.find_element_by_tag_name("a").text authorsStr = li.find_element_by_class_name("author_list").text print('{:10s}:{}'.format(titleStr, authorsStr)) driver.quit()




方法2

# coding:utf8 from selenium import webdriverdriver = webdriver.Chrome(r"d:\tools\webdrivers\chromedriver.exe") # driver.implicitly_wait(1) # 抓取排行榜信息 driver.get('http://music.baidu.com/top/new') # 層層往下查找 div = driver.find_element_by_css_selector("#songListWrapper li") for li in liList: # 哪些 是有 有up 標簽的 歌曲, F12 查看特性 upTags = li.find_elements_by_class_name("up") if upTags: # 由于只要 歌曲名和 演唱者名 title = li.find_element_by_class_name("song-title") titleStr = title.find_element_by_tag_name("a").text authorsStr = li.find_element_by_class_name("author_list").text print('{:10s}:{}'.format(titleStr, authorsStr)) driver.quit()

CSS選擇器????????????????? style屬性:定義元素顯示樣式

什么是CSS選擇器

內聯(inline)樣式????????? 寫在元素里面

樣式表(內部、外部)??????寫在head里

css選擇器是瀏覽器用來選擇元素的

執行效率高

選擇元素的方法

根據tag名?? p {color:red;}

根據ID??????? #food {color:red;}

根據class?? .vagetable {color:red;}

根據tag名和class組合寫(如果多個)???? span.vegetable {color:red;}

用css選擇器選擇web元素

find_element_by_css_selector

find_elements_by_css_selector

根據tag名??? driver.find_element_by_css_selector('p')

根據id????????? driver.find_element_by_css_selector('#food')

根據class??? driver.find_element_by_css_selector('.vegetable')

后代(descendant)選擇器

選擇元素內部的元素

語法? <s1>? <s2>?

  選擇s1元素里面所有的s2元素

  可以是直接子節點,也可以不是

比如

  #choose_car option

  footer p

可以是很多級

  ul ol li em {color:bluse;}

?

?

?

?

如果在三個iframe從第三個回到第二個iframe也是直接定位到第二個iframeID就可以了嗎?

driver.switch_to.parent_frame()

轉載于:https://www.cnblogs.com/hyzhang/p/7792211.html

總結

以上是生活随笔為你收集整理的选择、操作web元素-2的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。