driver = webdriver.Chrome()
driver.maximize_window()
driver.get("/")
sleep(1)
通过ID进行元素定位
# ele1 = driver.find_element_by_id("searchKey") # 老
ele1 = driver.find_element(by=By.ID, value='searchKey')
通过name进行元素定位
# ele2 = driver.find_element_by_name("searchKey") # 老
ele2 = driver.find_element(by=By.NAME, value='searchKey')
通过class进行元素定位 .
# ele3 = driver.find_element_by_class_name("searchKey") # 老
ele3 = driver.find_element(by=By.CLASS_NAME, value='s_int')
通过tag_name定位
# ele4 = driver.find_element_by_tag_name('input') # 老
ele4 = driver.find_element(By.TAG_NAME, 'input')
通过linktext定位超链接,有超链接只能拿内容就行
elex1 = driver.find_element(By.LINK_TEXT, '金牌卧底')
elex2 = driver.find_element(By.PARTIAL_LINK_TEXT, '金牌') # 模糊匹配
CSS定位
# 通过绝对路径, 空格后既是子节点, .是class;#是id
ele0 = driver.find_element(By.CSS_SELECTOR, "div div div div.top_l")
通过css——selector 定位
ele5 = driver.find_element(By.CSS_SELECTOR, '[name="searchKey"]') # 或者input[name="searchKey"]
通过第几位来定位,nth-child(1)
elex3 = driver.find_element(By.CSS_SELECTOR, "dl.hot_recommend:nth-child(2) a")
通过兄弟元素定位 兄弟+想要定位的元素
elex4 = driver.find_element(By.CSS_SELECTOR, "dl.hot_recommend dt+dd")
通过xpath 定位,不同于css的空格,xpath子节点是/
1. // 表示从标签任意节点开始,也就是前面有一万个div和一个input,只要 //div/input 就可以
2. 单元素:@后是属性名,不加@就是标签名, //input[@name=‘searchKey’] input中,name为searchKey的元素。
ele6 = driver.find_element(By.XPATH, "//input[@name='searchKey']")
3. 多元素定位:and 连接多个属性
ele7_pre = '//dl[@class="hot_recommend" and @id="topBooks2"]/dt/a'
ele7 = driver.find_element(By.XPATH, ele7_pre)
4. 模糊匹配定位: 1. //div[contains(@class,“Banner”)] (推荐) ; 2. //div[start-with(属性, “很长的名称”)];
ele8 = driver.find_element(By.XPATH, '//div[contains(@class,"Bann")]') # 新老
ele9 = driver.find_element(By.XPATH, ‘//div[start-with(@class,“cha”)]’) # 老
5.文本定位
ele10 = driver.find_element(By.XPATH, '//h2[contains(text(),"热门")]')
6. /… 就是找父元素
7. //p/*[0]第一个子元素
selenium 4.0有的网格定位:要先有一个参照物,然后定位。需要导入对应的库
from selenium.webdriver.support.relative_locator import locate_with
above 上方;below下方;leftof 左;rightof 右;near
elex5 = driver.find_element(locate_with(By.XPATH, "//a").above({By.LINK_TEXT: "成吉思汗的动物军团"}))
获取属性
driver.find_element(By.XPATH, '//input').send_keys("1234")
attr = driver.switch_to.active_element.get_attribute("name")
print(attr)
js改变元素显示效果
driver.execute_script(
"arguments[0].setAttribute('style',arguments[1]);",
elex5,
"border: 2px solid green;" # 边框绿色
)
sleep(2)