find_element_by_id()
find_element_by_name()
find_element_by_xpath()
find_element_by_css_selector()
find_element_by_link_text() :链接tag的文字内容 不是链接地址
find_element_by_partial_link_text() :链接tag的文字内容的一部分 不是链接地址的部分
find_element_by_tag_name()
find_element_by_class_name()
find_element_by_class_name() 只能有一个class name作为参数 不能同时输入inputs和name两个参数
但是XPath //div[@class="inputs"] 是没有办法查到//div[@class="inputs name"]的
from selenium.webdriver.common.by import By
elementById = driver.find_element(By.ID, "name")
.class1.class2.class3 -> until you find a unique element
Wildcards in CSS Selectors
^ Represents the starting text
$ Represents the ending text
* Represents the text contained
fieldset>table table是filedset的child
fieldset>#product product id是filedset的child
Difference between single '/' or double '//'
Single slash '/' anywhere in xpath signifies to look for the element immediately inside the parent element.
Double slash '//' signifies to look for any child or nested child element inside the parent element.
XPath
//div[@id='navbar']/div/div/div/ul/li[2]/a
//div[@id='navbar']//ul/li[2]/a
//div[@class='homepage-hero']//a[text()='Register']
Using contains to find the elements:
//tag[contains(attribute, 'value')]
//a[contains(text(),'Login')]
//a[contains(@class,'navbar-link') and contains (@href,'sign_in')]
Using starts-with to find the elements:
//tag[starts-with(attribute, 'value')]
//a[starts-with(@class,'navbar-link')]
Parent
//parent::<tag>
Preceding Sibling 排序在前的Sibling
//preceding-sibling::<tag>
Following Sibling 排序在后的Sibling
//following-sibling::<tag>
先找一个有id的element会更快
drvier.implicitly_wait(10)
如果第一次没有找到element等10秒再找