css优先示例有44种:
.class: .intro,优先选择class=‘intro’的大部份原素
#id: #firstname,优先选择id=‘fistname’的大部份原素
*: *,优先选择大部份的原素
element: p,优先选择大部份的p条码的原素
element,element: div,p,优先选择大部份的div条码原素和大部份p条码的原素
element element: div p,优先选择div条码原素外部的大部份p条码原素
element>element: div>p,优先选择父原素为div条码原素的大部份p条码原素
element+element: div+p,优先选择紧接div原素后的大部份p原素
[attribute]: [target],优先选择暗含target特性的大部份原素
[attritube=value]:[target=_blank],优先选择target=”_blank”的大部份原素
[attritube~=value]:[title~=flower],优先选择title特性包涵单字‘flower’的大部份原素
[attritube|=value]:[lang|=en],优先选择lang特性值以‘en’开头的大部份原素(css2)(selenium用不到)
:link a:link,优先选择大部份未被访问的链接
:visited a:visited,优先选择大部份已被访问的链接
:active a:active,优先选择活动链接
:hover a:hover,优先选择鼠标指针位于其上的链接
:focus input:focus,优先选择获得焦点的input原素
:first-line p:first-
:first-child p:first-child,优先选择属于父原素的第一个子原素的每个p条码原素
:before p:before,在每个p条码原素的内容之前插入内。(样式指定内容插入到p条码包括的文本之前)
:after p:after,在每个p条码原素的内容后插入内容。(样式指定内容插入到p条码包括的文本后)
:lang(language) p:lang(it),优先选择的lang特性值等于it的每个p条码原素
element1~element2 p~ul,优先选择前面有p条码原素的每一个ul条码原素(只要前面有p条码都可以,不管跨不跨标签,也不管是不是子条码)
[attribute^=value] a[src^=’https’],优先选择其src特性以’https’开头的每个a条码原素
[attribute$=value] a[src$=’.pdf’],优先选择其src特性以’.pdf’结尾的大部份a条码原素
[attribute*=value] a[src*=’abc’],优先选择其src特性包涵’abc’子串的每个a条码原素
:first-of-type p:first-of-type,优先选择父原素的首个p条码原素的每个p条码原素(大部份p条码对应的父条码的第一个子p条码原素)
:last-of-type p:last-of-type,优先选择父原素的最后一个p条码原素的每个p条码原素(大部份p条码对应的父条码的最后一个子p条码原素)
:only-of-type p:only-of-type,优先选择父原素里面唯一的p条码原素的每个p条码原素(大部份p条码对应的父条码原素只有一个子p条码原素)
:only-child p:only-child,优先选择父原素里面只有一个条码的每个p条码原素(父条码里面只有一个p条码)
:nth-child(n) p:nth-child(2),优先选择属于父原素的第二个子原素的每个p条码原素(大部份的p条码的父条码对应的第二个子条码原素)
:nth-last-child(n) p:nth-last-child(2),优先选择属于父原素的倒数第二个子原素的每个p条码原素(大部份的p条码的父条码对应的倒数第二个子条码原素)
:nth-of-type(n) p:nth-of-type(2),优先选择属于其父条码原素的第二个p条码的每个p条码原素(所有p条码对应的父条码的第二个p条码原素,也就是这个和p条码平级)
:nth-last-of-type(n) p:nth-last-of-type(2),优先选择属于其父条码原素的倒数第二个p条码的每个p条码原素(大部份p条码对应的父条码的倒数第二个p条码原素,也就是这个和p条码平级)
:last-child p:last-child,优先选择属于其父条码原素最后一个子原素是p条码的每个p条码原素(父条码的最后一个条码必须是p条码)
:root :root,优先选择文档的根原素
:empty p:empty,优先选择没有子原素的每个p条码原素(包括文本节点,无法理解)
:target #news:target,优先选择当前活动的#news原素(锚点功能定位)
:enabled input:enabled,优先选择每个启用input条码原素(input文本可编辑)
:disabled input:disabled,优先选择每个禁用input条码原素(input文本不可编辑)
:checked input:checked,优先选择每个被选中的input条码原素
:not(selector) :not(p),优先选择非p条码原素的每个原素
::selection ::selection,优先选择被用户选取的原素部分(选取文本会被样式控制)
selenium通过css功能定位常用的有:
通过class功能定位,一个条码有多个class中间的空格用点代替,通过父条码的父条码功能定位p,在通过p功能定位子条码input,通过条码+class功能定位
#element element: div p,优先选择div条码原素外部的大部份p条码原素
#element>element: div>p,优先选择父原素为div条码原素的大部份p条码原素
#element element: div p,优先选择div条码原素外部的大部份p条码原素
#element>element: div>p,优先选择父原素为div条码元素的大部份p条码原素
#element+element: div+p,优先选择紧接div原素后的大部份p原素
#id: #firstname,优先选择id=‘fistname’的大部份原素
#[attritube=value]:[target=_blank],优先选择target=”_blank”的大部份原素
#[attribute]: [target],优先选择暗含target特性的大部份原素
#[attritube~=value]:[title~=flower],优先选择title特性包涵单字‘flower’的大部份原素
#:first-child p:first-child,优先选择属于父原素的第一个子原素的每个p条码原素
#[attribute^=value] a[src^=’https’],优先选择其src特性以’https’开头的每个a条码原素
#[attribute$=value] a[src$=’.pdf’],优先选择其src属性以’.pdf’结尾的大部份a条码原素
#[attribute*=value] a[src*=’abc’],优先选择其src特性包涵’abc’子串的每个a条码原素
#:first-of-type p:first-of-type,优先选择父原素的首个p条码原素的每个p条码原素(大部份p条码对应的父条码的第一个子p条码原素)
#:last-of-type p:last-of-type,优先选择父原素的最后一个p条码原素的每个p条码原素(大部份p条码对应的父条码的最后一个子p条码原素)
#:only-of-type p:only-of-type,优先选择父原素里面唯一的p条码原素的每个p条码原素(大部份p条码对应的父条码原素只有一个子p条码原素)
#:nth-child(n) p:nth-child(2),优先选择属于父原素的第二个子原素的每个p条码原素(大部份的p条码的父条码对应的第二个子条码原素)
#:only-child p:only-child,优先选择父原素里面只有一个条码的每个p条码原素(父条码里面只有一个p条码)
#:nth-last-child(n) p:nth-last-child(2),优先选择属于父原素的倒数第二个子原素的每个p条码原素(大部份的p条码的父条码对应的倒数第二个子条码原素)
#:nth-of-type(n) p:nth-of-type(2),优先选择属于其父条码原素的第二个p条码的每个p条码原素(大部份p条码对应的父条码的第二个p条码原素,也就是这个和p条码平级)
#鼠标放上悬浮优先选择菜单ActionChains(browser).move_to_element(article).perform()需要导入ActionChains包from selenium.webdriver.common.action_chains import ActionChains
#:nth-last-of-type(n) p:nth-last-of-type(2),优先选择属于其父条码原素的倒数第二个p条码的每个p条码原素(大部份p条码对应的父条码的倒数第二个p条码原素,也就是这个和p条码平级)
#:last-child p:last-child,优先选择属于其父条码原素最后一个子原素是p条码的每个p条码原素(父条码的最后一个条码必须是p条码)
#coding=utf-8 from selenium import webdriver import time from selenium.webdriver.common.action_chains import ActionChains browser=webdriver.Chrome() browser.maximize_window() browser.get(地址) #通过class功能定位,一个条码有多个class中间的空格用点代替 browser.find_element_by_css_selector(.ant-input.inp.mt28).send_keys(ceshi) #通过父条码的父条码功能定位p,在通过p功能定位子条码input browser.find_element_by_css_selector(div.login-main>p:nth-child(2)>input).send_keys(123456) #通过条码+class功能定位 browser.find_element_by_css_selector(button.ant-btn.ant-btn-primary).click() time.sleep(1) #element element: div p,优先选择div条码原素外部的大部份p条码原素 browser.find_element_by_css_selector(div.icon-pass-change-div i).click() time.sleep(1) #element>element: div>p,优先选择父原素为div条码原素的大部份p条码原素 browser.find_element_by_css_selector(button.ant-modal-close>span).click() time.sleep(1) #element+element: div+p,优先选择紧接div原素后的大部份p原素 browser.find_element_by_css_selector(div.user-name+div>i).click() time.sleep(1) #id: #firstname,优先选择id=‘fistname’的所有原素 browser.find_element_by_css_selector(#sourcePwd).send_keys(wafer123) #[attritube=value]:[target=_blank],优先选择target=”_blank”的大部份原素 browser.find_element_by_css_selector(#newPassword[type=”password”]).send_keys(123456) #[attribute]: [target],优先选择暗含target特性的大部份原素 browser.find_element_by_css_selector(#confirmPassword[placeholder]).send_keys(123456) #[attritube~=value]:[title~=flower],优先选择title特性包涵单字‘flower’的大部份原素 browser.find_element_by_css_selector(button[class~=ant-btn]:nth-child(1)).click() #:first-child p:first-child,优先选择属于父原素的第一个子原素的每个p条码原素 time.sleep(1) browser.find_element_by_css_selector(.dept-chose-icon>i:first-child).click() time.sleep(1) #[attribute^=value] a[src^=https],优先选择其src特性以https开头的每个a标签原素 browser.find_element_by_css_selector(button[aria-label^=”Close”]>span).click() time.sleep(1) #[attribute$=value] a[src$=.pdf],优先选择其src特性以.pdf结尾的大部份a条码原素 browser.find_element_by_css_selector(i[class$=”anticon anticon-plus-circle-o”]).click() time.sleep(1) #[attribute*=value] a[src*=abc],优先选择其src特性包涵abc子串的每个a条码原素 browser.find_element_by_css_selector(.ant-modal-body>span[class*=”ant-select”]).click() time.sleep(1) #:first-of-type p:first-of-type,优先选择父原素的首个p条码原素的每个p条码原素(大部份p条码对应的父条码的第一个子p条码原素) browser.find_element_by_css_selector(.ant-select-tree>li:first-of-type).click() time.sleep(0.5) #:last-of-type p:last-of-type,优先选择父原素的最后一个p条码原素的每个p条码原素(大部份p条码对应的父条码的最后一个子p条码原素) browser.find_element_by_css_selector(.ant-modal-footer>button:last-of-type).click() time.sleep(0.5) #:only-of-type p:only-of-type,优先选择父原素里面唯一的p条码原素的每个p条码原素(大部份p条码对应的父条码原素只有一个子p条码原素) browser.find_element_by_css_selector(.dept-chose-icon>i:only-of-type).click() time.sleep(0.5) #:nth-child(n) p:nth-child(2),优先选择属于父原素的第二个子原素的每个p条码原素(大部份的p条码的父标签对应的第二个子条码原素) browser.find_element_by_css_selector(.ant-modal-footer>button:nth-child(1)).click() time.sleep(0.5) #:only-child p:only-child,优先选择父原素里面只有一个条码的每个p条码原素(父条码里面只有一个p条码) browser.find_element_by_css_selector(.ant-menu-submenu-title>i:only-child).click() #:nth-last-child(n) p:nth-last-child(2),选择属于父原素的倒数第二个子原素的每个p条码原素(大部份的p条码的父条码对应的倒数第二个子条码原素) browser.find_element_by_css_selector(#item_0$Menu>li:nth-last-child(2)).click()#id里面有$符号需要转义一下 time.sleep(0.5) #:nth-of-type(n) p:nth-of-type(2),优先选择属于其父条码原素的第二个p条码的每个p条码原素(大部份p条码对应的父条码的第二个p条码原素,也就是这个和p条码平级) article=browser.find_element_by_css_selector(.ant-menu-submenu-title>i:nth-of-type(1)) #鼠标放上悬浮优先选择菜单ActionChains(browser).move_to_element(article).perform()需要导入ActionChains包 ActionChains(browser).move_to_element(article).perform() time.sleep(0.5) #:nth-last-of-type(n) p:nth-last-of-type(2),优先选择属于其父条码原素的倒数第二个p条码的每个p条码原素(大部份p条码对应的父条码的倒数第二个p条码原素,也就是这个和p条码平级) browser.find_element_by_css_selector(#item_0$Menu>li:nth-last-of-type(2)).click() time.sleep(1) #:last-child p:last-child,优先选择属于其父条码原素最后一个子原素是p条码的每个p条码原素(父条码的最后一个条码必须是p条码) browser.find_element_by_css_selector(.user-info>div:last-child).click() time.sleep(0.5) browser.find_element_by_css_selector(.ant-confirm-btns>button:nth-child(2)).click() browser.close()