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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

1月11日学习内容整理:请求库selenium之选择器,等待元素被加载

發布時間:2024/4/13 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 1月11日学习内容整理:请求库selenium之选择器,等待元素被加载 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

首先引入:

from selenium import webdriver from selenium.webdriver import ActionChains from selenium.webdriver.common.by import By #按照什么方式查找,By.ID,By.CSS_SELECTOR from selenium.webdriver.common.keys import Keys #鍵盤按鍵操作 from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWait #等待頁面加載某些元素

?

driver = webdriver.Chrome()

注意:

》》find_element ? ? 永遠是找第一個符合要求的標簽

》》find_elements ? ?是找所有符合要求的標簽,列表形式輸出

》》可以簡寫為find_element(By.ID,'kw') ?這樣的形式

1、通過id值

input_tag=driver.find_element_by_id("xxx") ? 得到的也是一個selenium對象

2、通過文本值

login=driver.find_element_by_link_text('登錄') ? ? ? ? ? ? 查找文本值為登錄的標簽

login.click() ? ? 點擊查找到的標簽

3、通過文本值的模糊匹配

login=driver.find_element_by_partial_link_text('登') ? ? 查找文本值包含登的標簽

4、通過class值

login_for_user=driver.find_element_by_class_name('xxx') ? 查找class值為xxx的第一個標簽

5、通過標簽名

driver.find_element_by_tag_name('a') ? ?查找第一個a標簽

6、通過name屬性值

input_user=driver.find_element_by_name('user') ? 查找name屬性值為user的第一個標簽

?

補充1:

返回的selenium對象的屬性和方法

# 打印標簽名 print(input_tag.tag_name)# 打印標簽的name屬性值,就是獲取標簽的所有屬性或者某個屬性值 print(input_tag.get_attribute('name'))# 打印標簽的文本值 print(input_tag.text)# 打印標簽的id值 print(tag.id)# 打印標簽的坐標位置,通常用在圖片標簽中,返回字典,key分別是x和y,可以用 # ['x']或者['y']取值 print(tag.location)
# 打印標簽的尺寸,返回字典,key分別是width height,可以用key取value值 print(tag.size)

?

補充2:

之前我們用的WebDriverWait是顯性等待,每次要有寫wait.until,而隱形等待則不需要

隱形等待:3同樣代表等待時間3秒

driver.implicitly_wait(3) #使用隱式等待

?

?

7、xpath:比起上述6個定位更精準

(1)//和/://代表從整篇文檔中查找,所有的元素;/代表從開頭找,第一個子元素,找不到就報錯

driver.find_element_by_xpath('//body/a') # 開頭的//代表從整篇文檔中尋找,body之后的/代表body的兒子,這一行找不到就會報錯了 driver.find_element_by_xpath('//body//a') # 開頭的//代表從整篇文檔中尋找,body之后的//代表body的子子孫孫

(2)獲取第幾個元素:一定注意這里找第幾個就寫幾,不代表索引

res1=driver.find_elements_by_xpath('//body//a[1]') #取第一個a標簽

(3)按照屬性查找:用到中括號[ ?],前面要加@,再寫屬性名=屬性值,遇到模糊查詢時要用到contains函數就可以了

res2=driver.find_element_by_xpath('//a[@href="image5.html"]')#模糊查找 res3=driver.find_element_by_xpath('//a[contains(@href,"image5")]')

(4)其它

# *代表所有標簽 查找指定class值的所有標簽,注意這里是elements,所以輸出列表 driver.find_elements_by_xpath('//*[@class="xxxxx"]')
# 這樣連著寫中括號,代表且的關系,查找所有div標簽中class值為指定的兩個值的標簽 driver.find_elements_by_xpath('//div[@class="xxxxx"][@class="yyyyy"]')
# 查找所有的a標簽,條件是a標簽中的img標簽的src屬性值為指定內容,注意這里是element,所以只返回一個selenium對象 print(driver.find_element_by_xpath('//a[img/@src="image2_thumb.jpg"]').text)
# 查找所有a標簽的父元素中的第一個,因為這里是element,第一個點代表a標簽這一級,第二個點表示上一級元素 print(driver.find_element_by_xpath('//a/..').tag_name)
# 查找所有的img標簽的父元素,這里是elements,所以返回列表 print(driver.find_elements_by_xpath('//img//..'))

?

8、css選擇器:就直接寫css選擇器的語法就可以

tag=driver.find_elements_by_css_selector('div a')

?

?

》》》》》等待元素被加載完

注意:我們查找標簽的基礎是這個標簽已經加載完畢,或者某個事件加載完后,若標簽還沒加載完我們就去查找這時就會出現問題,所以要用到顯性等待WebDriverWait,當然直接用隱形等待也可以

wait=WebDriverWait(driver,3),括號中用By來查找標簽,可以用id值,class值,標簽名,css選擇器CSS_SELECTOR等

(1)等待某個標簽加載完后

login_for_user=wait.until(EC.presence_of_element_located((By.CLASS_NAME,'tang-pass-footerBarULogin')))

(2)等待某個標簽點擊事件加載完后

login_for_user=wait.until(EC.element_to_be_clickable((By.CLASS_NAME,'tang-pass-footerBarULogin')))

(3)等待所有標簽加載完后

login_for_user = wait.until(EC.presence_of_all_elements_located)

返回的selenium對象

?

轉載于:https://www.cnblogs.com/wanghl1011/articles/8268750.html

總結

以上是生活随笔為你收集整理的1月11日学习内容整理:请求库selenium之选择器,等待元素被加载的全部內容,希望文章能夠幫你解決所遇到的問題。

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