selenium+python如何定位動(dòng)態(tài)的下拉框元素(ul-li)?
1. 使用CSS選擇器的部分匹配功能
如果ID或類(lèi)名的一部分是靜態(tài)的,你可以利用CSS選擇器的“包含”(*=)、“開(kāi)始于”(^=)或“結(jié)束于”($=)特性來(lái)進(jìn)行元素定位。
包含某文本的屬性值:
driver.find_element_by_css_selector("ul[id*='部分ID']")
以某文本開(kāi)頭的屬性值:
driver.find_element_by_css_selector("ul[id^='開(kāi)頭文本']")
以某文本結(jié)尾的屬性值:
driver.find_element_by_css_selector("ul[id$='結(jié)尾文本']")
2. 使用XPath的文本或?qū)傩园δ?br />如果元素的某些屬性值或文本內(nèi)容是可預(yù)測(cè)的,但整個(gè)值是動(dòng)態(tài)的,可以使用XPath的contains函數(shù)。
屬性包含某文本:
driver.find_element_by_xpath("//ul[contains(@id,'部分ID')]")
元素文本內(nèi)容包含某文本:
driver.find_element_by_xpath("//li[contains(text(),'部分文本')]")
3. 基于元素的結(jié)構(gòu)定位
如果無(wú)法依賴(lài)于元素的屬性或文本(因?yàn)樗鼈兲珓?dòng)態(tài)),但元素的HTML結(jié)構(gòu)相對(duì)靜態(tài),可以根據(jù)其父元素或相鄰元素的位置來(lái)定位。
父元素相對(duì)較靜態(tài):
driver.find_element_by_xpath("//div[@id='靜態(tài)父元素ID']/ul/li")
特定順序的子元素:
driver.find_element_by_xpath("//ul/li[3]") # 選擇第三個(gè)li元素
4. JavaScript執(zhí)行
在一些極端的情況下,如果通過(guò)上述方法都無(wú)法定位到元素,可以考慮直接使用Selenium執(zhí)行JavaScript來(lái)實(shí)現(xiàn)對(duì)元素的操作。
driver.execute_script("arguments[0].click();", element)
這里的element需要提前通過(guò)其他方法獲得(如前面提到的基于結(jié)構(gòu)的定位方式),然后直接使用JavaScript進(jìn)行點(diǎn)擊操作。
5. 顯式等待
由于元素可能是動(dòng)態(tài)加載的,使用顯式等待確保元素出現(xiàn)在DOM中并且是可交互的,是一種好的實(shí)踐。
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CSS_SELECTOR, "ul[id*='部分ID']"))
)
處理動(dòng)態(tài)元素時(shí),通常需要結(jié)合多種策略。重要的是先嘗試找到元素屬性中相對(duì)靜態(tài)的部分,或者利用元素的DOM結(jié)構(gòu)關(guān)系。在少數(shù)情況下,可能需要依賴(lài)于JavaScript執(zhí)行。實(shí)踐中,經(jīng)常需要根據(jù)具體情況調(diào)整策略。
無(wú)法通過(guò)python+selenium定位下拉框進(jìn)行指定項(xiàng)選擇怎么
如果具有 `id` 屬性,使用 `find_element_by_id()`。在選擇下拉項(xiàng)時(shí),可以通過(guò)下拉項(xiàng)的文本內(nèi)容或索引進(jìn)行選擇。綜上所述,解決使用 python+selenium 定位下拉框無(wú)法選擇指定項(xiàng)的問(wèn)題,需要從頁(yè)面加載、元素定位、動(dòng)態(tài)加載處理以及下拉框?qū)傩岳玫榷喾矫嫒胧帧Mㄟ^(guò)以上方法,通常可以有效解決相關(guān)問(wèn)題。
Selenium定位問(wèn)題,用CSS,ID,name或xpath都行,怎么定位這個(gè)button._百...
import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.By;public class ByClassName { public static void main(String[] args) { WebDriver driver = new FirefoxDriver(); driver.get(); WebElement element = driver.findElement(By....
python selenium如何點(diǎn)擊頁(yè)面table列表中的元素
1.通過(guò)selenium定位方式(id、name、xpath等方式)定位table標(biāo)簽 html源碼#selenium操作代碼table1=driver.find_element_by_id('table1')2.獲取總行數(shù)(也就是獲取tr標(biāo)簽的個(gè)數(shù))html源碼姓名性別#selenium操作源碼 table_rows = table1.find_elements_by_tag_name('tr')3.獲取總列數(shù)(也就是tr標(biāo)簽...
selenium(python)如何往div中添加內(nèi)容?
通過(guò)這種方式,你可以靈活地在運(yùn)行Selenium的Python腳本中添加或修改div內(nèi)容。這種方法尤其適用于那些無(wú)法通過(guò)CSS選擇器直接操作的屬性或需要?jiǎng)討B(tài)生成內(nèi)容的場(chǎng)景。請(qǐng)確保在執(zhí)行腳本前,先準(zhǔn)備好目標(biāo)網(wǎng)頁(yè)以及需要定位的div元素的屬性(如id、class等),這將幫助你更精確地完成操作。同時(shí),使用這種方法時(shí),注意...
Python+selenium 怎么定位自定義彈窗元素
首先要確定彈窗的類(lèi)型。彈出窗口基本上有如下三種實(shí)現(xiàn)方式:(1)div彈窗 (2)新標(biāo)簽頁(yè)彈窗 (3)alert彈窗 針對(duì)不同類(lèi)型的彈窗,相應(yīng)采取不同的定位措施。由于不知問(wèn)題中實(shí)際的彈窗類(lèi)型,在此籠統(tǒng)說(shuō)下:1、div彈窗 對(duì)于此類(lèi)彈窗,可以直接用 find_element_by_... 得到 div 窗口中各元素,再進(jìn)行...
python selenium 定位下拉列表框的問(wèn)題
可以用xpath...m.find_element_by_xpath("\/\/option[@value='1']").click(),它的value對(duì)應(yīng)京東里面的是1,2,3,4這個(gè)。。。在者,找到下拉框的時(shí)候貌似不需要調(diào)用click()試試唄,這個(gè)xpath不行就用長(zhǎng)的。。。\/html\/body\/div[8]\/div\/div[2]\/div\/div\/div\/div\/div[2]\/div[1]\/select...
Python selenium 自動(dòng)化定位,這種下拉什么定位到“護(hù)照”?
如果樓主把護(hù)照元素的源碼顯示出來(lái)更好解決問(wèn)題。思路大概是,xpath=\/\/li\/span[@text='護(hù)照'],如果匹配多個(gè)結(jié)果時(shí),后追加[第n個(gè)];或者繼續(xù)追加父節(jié)點(diǎn)和它屬性信息。
python selenium怎么查找沒(méi)有id或name的fream
selenium 可以用xpath或者css來(lái)定位目標(biāo).對(duì)于frame, 如果沒(méi)有id, 可以用name或者其他屬性來(lái)定位. 例如: \/\/frame[@name='xxx']如果所有屬性都沒(méi)有, 那就通過(guò)先定位該frame的祖輩級(jí)元素來(lái)縮減范圍, 并逐步縮減到目標(biāo)唯一.例如: \/\/div[@id='aaa']\/\/frame!
selenium python 定位問(wèn)題,前期采用了iframe\/xpath\/class CSS的方法全 ...
這個(gè)路徑是從網(wǎng)頁(yè)起始標(biāo)簽開(kāi)始一直到要定位的元素的路徑,如果要定位的元素在頁(yè)面最下面,則這個(gè)Xpath路徑會(huì)非常長(zhǎng)。如果在要定位的元素與頁(yè)面開(kāi)始之間的元素有任何增減,元素定位就會(huì)失敗。
python+selenium 怎么處理display:none 元素隱藏起來(lái)了,不能定位...
調(diào)用js方法:driver.execute_script("arguments[0].click();", 元素位置))例如:driver.execute_script("arguments[0].click();", driver.find_element_by_xpath("\/html\/body\/header\/div\/ul\/li[4]\/div\/div[2]\/ul\/li[1]\/a"))
相關(guān)評(píng)說(shuō):
鐵西區(qū)共軛: ______ 1,去官網(wǎng)下載selnium對(duì)應(yīng)的python包2,集成相關(guān)的包到項(xiàng)目中3,下載需要的瀏覽器驅(qū)動(dòng)4,編寫(xiě)demo 指定瀏覽器驅(qū)動(dòng) 初始化webdriver5,基于webdriver編寫(xiě)你的功能 希望我的回答能幫助到您
鐵西區(qū)共軛: ______ 其實(shí)python自帶的uinttest就挺好的 驅(qū)動(dòng)數(shù)據(jù)的話(huà),直接用下面這樣的代碼就行 source = open("input_file.txt", "r") values = source.readlines() for search in values: selenium.open("/test_page") selenium.click("buttonPress") ... # test ... ...
鐵西區(qū)共軛: ______ 先在命令行中下載一個(gè)selenium庫(kù):1 python -m pip install selenium 然后使用selenium中的webdriver來(lái)進(jìn)行模擬網(wǎng)頁(yè)點(diǎn)擊:123456789 from selenium import webdriver from selenium.common.exceptions import TimeoutException from selenium....
鐵西區(qū)共軛: ______ 最近需要寫(xiě)一個(gè)爬蟲(chóng),邏輯上有一個(gè)環(huán)節(jié)是取得一個(gè)頁(yè)面的所有資源加載鏈接(html5頁(yè)面) (ps:python下的確是是有個(gè)第三方包叫Ghost.py可以取得,但是嘗試后效果并不好,估計(jì)是因?yàn)镚host.py的webkit對(duì)html5的支持并不好.) 選擇用...
鐵西區(qū)共軛: ______ element=driver.find_element_by_xpath("//*[@id='lobby-left-container']/div[2]/div/table/tbody/tr[1]/td[2]/div")data_id=element.get_attribute("data-id")
鐵西區(qū)共軛: ______ 你可能需要兩個(gè)函數(shù)1、implicitly_wait(30)智能等待,最大30s2、location_once_scrolled_into_view 滾動(dòng)到某個(gè)元素處,也就是滾動(dòng)直到這個(gè)元素出現(xiàn)在屏幕里
鐵西區(qū)共軛: ______ selenium2是一個(gè)自動(dòng)測(cè)試框架.類(lèi)似的框架,其中有名氣應(yīng)該還有2個(gè),一個(gè)是windmill,另一個(gè)似乎pamrie還不夠格.selenium2搭建簡(jiǎn)單,與python結(jié)合著使用時(shí)注意把driver設(shè)置正確就要中以.建議下載tgz包,然后在命令行下運(yùn)行python setup.py install方式安裝.安裝到python的site-package目錄后,在任何地方都可以用python調(diào)用它.python與eclipse結(jié)合,你找一找pydev的安裝文檔就可以了.通過(guò)pydev就可以方便的編輯python程序.用python開(kāi)發(fā),相對(duì)java開(kāi)發(fā)來(lái)講,不需要依賴(lài)各種包.所有的包都安裝在統(tǒng)一的目錄下.
鐵西區(qū)共軛: ______ 在selenium IDE工具中文件->Export Test Case As->python2有兩個(gè)選項(xiàng)隨你選擇.
鐵西區(qū)共軛: ______ #!/usr/bin/python3.4# -*- coding: utf-8 -*- from selenium import webdriver import time# http://www.cnblogs.com/fnng/p/3238685.html# 打開(kāi)火狐瀏覽器 browser = webdriver.Firefox()# 輸入網(wǎng)址 browser.get("http://www.baidu.com")# 根據(jù)各自網(wǎng)...
鐵西區(qū)共軛: ______ 你可以在chrome上加一個(gè)代理,比如tiny proxy,它是純python寫(xiě)的.你改一改就可以奕成抓包程序, 自然就可以獲得返回的請(qǐng)求. 另外在selenium里,也應(yīng)該可以獲得響應(yīng)結(jié)果.它通過(guò)chrome驅(qū)動(dòng),我沒(méi)有仔細(xì)看過(guò)代碼,webkit內(nèi)核是直接通過(guò)toHtml,或者是類(lèi)似的命令可以獲得響應(yīng)結(jié)果的. selenium應(yīng)該也可以. 猜可以通過(guò)javascript驅(qū)動(dòng)selenium,獲得響應(yīng)結(jié)果.