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 ? ? 永遠(yuǎn)是找第一個符合要求的標(biāo)簽
》》find_elements ? ?是找所有符合要求的標(biāo)簽,列表形式輸出
》》可以簡寫為find_element(By.ID,'kw') ?這樣的形式
1、通過id值
input_tag=driver.find_element_by_id("xxx") ? 得到的也是一個selenium對象
2、通過文本值
login=driver.find_element_by_link_text('登錄') ? ? ? ? ? ? 查找文本值為登錄的標(biāo)簽
login.click() ? ? 點(diǎn)擊查找到的標(biāo)簽
3、通過文本值的模糊匹配
login=driver.find_element_by_partial_link_text('登') ? ? 查找文本值包含登的標(biāo)簽
4、通過class值
login_for_user=driver.find_element_by_class_name('xxx') ? 查找class值為xxx的第一個標(biāo)簽
5、通過標(biāo)簽名
driver.find_element_by_tag_name('a') ? ?查找第一個a標(biāo)簽
6、通過name屬性值
input_user=driver.find_element_by_name('user') ? 查找name屬性值為user的第一個標(biāo)簽
?
補(bǔ)充1:
返回的selenium對象的屬性和方法
# 打印標(biāo)簽名 print(input_tag.tag_name)# 打印標(biāo)簽的name屬性值,就是獲取標(biāo)簽的所有屬性或者某個屬性值 print(input_tag.get_attribute('name'))# 打印標(biāo)簽的文本值 print(input_tag.text)# 打印標(biāo)簽的id值 print(tag.id)# 打印標(biāo)簽的坐標(biāo)位置,通常用在圖片標(biāo)簽中,返回字典,key分別是x和y,可以用 # ['x']或者['y']取值 print(tag.location)# 打印標(biāo)簽的尺寸,返回字典,key分別是width height,可以用key取value值 print(tag.size)
?
補(bǔ)充2:
之前我們用的WebDriverWait是顯性等待,每次要有寫wait.until,而隱形等待則不需要
隱形等待:3同樣代表等待時間3秒
driver.implicitly_wait(3) #使用隱式等待?
?
7、xpath:比起上述6個定位更精準(zhǔn)
(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標(biāo)簽(3)按照屬性查找:用到中括號[ ?],前面要加@,再寫屬性名=屬性值,遇到模糊查詢時要用到contains函數(shù)就可以了
res2=driver.find_element_by_xpath('//a[@href="image5.html"]')#模糊查找 res3=driver.find_element_by_xpath('//a[contains(@href,"image5")]')(4)其它
# *代表所有標(biāo)簽 查找指定class值的所有標(biāo)簽,注意這里是elements,所以輸出列表 driver.find_elements_by_xpath('//*[@class="xxxxx"]')# 這樣連著寫中括號,代表且的關(guān)系,查找所有div標(biāo)簽中class值為指定的兩個值的標(biāo)簽 driver.find_elements_by_xpath('//div[@class="xxxxx"][@class="yyyyy"]')
# 查找所有的a標(biāo)簽,條件是a標(biāo)簽中的img標(biāo)簽的src屬性值為指定內(nèi)容,注意這里是element,所以只返回一個selenium對象 print(driver.find_element_by_xpath('//a[img/@src="image2_thumb.jpg"]').text)
# 查找所有a標(biāo)簽的父元素中的第一個,因為這里是element,第一個點(diǎn)代表a標(biāo)簽這一級,第二個點(diǎn)表示上一級元素 print(driver.find_element_by_xpath('//a/..').tag_name)
# 查找所有的img標(biāo)簽的父元素,這里是elements,所以返回列表 print(driver.find_elements_by_xpath('//img//..'))
?
8、css選擇器:就直接寫css選擇器的語法就可以
tag=driver.find_elements_by_css_selector('div a')?
?
》》》》》等待元素被加載完
注意:我們查找標(biāo)簽的基礎(chǔ)是這個標(biāo)簽已經(jīng)加載完畢,或者某個事件加載完后,若標(biāo)簽還沒加載完我們就去查找這時就會出現(xiàn)問題,所以要用到顯性等待WebDriverWait,當(dāng)然直接用隱形等待也可以
wait=WebDriverWait(driver,3),括號中用By來查找標(biāo)簽,可以用id值,class值,標(biāo)簽名,css選擇器CSS_SELECTOR等
(1)等待某個標(biāo)簽加載完后
login_for_user=wait.until(EC.presence_of_element_located((By.CLASS_NAME,'tang-pass-footerBarULogin')))(2)等待某個標(biāo)簽點(diǎn)擊事件加載完后
login_for_user=wait.until(EC.element_to_be_clickable((By.CLASS_NAME,'tang-pass-footerBarULogin')))(3)等待所有標(biāo)簽加載完后
login_for_user = wait.until(EC.presence_of_all_elements_located)返回的selenium對象
?
轉(zhuǎn)載于:https://www.cnblogs.com/wanghl1011/articles/8268750.html
總結(jié)
以上是生活随笔為你收集整理的1月11日学习内容整理:请求库selenium之选择器,等待元素被加载的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python中乐高积木——函数
- 下一篇: 阿里RocketMQ是怎样孵化成Apac