English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
오늘은 selenium에서 부모, 형제, 이전 자식 노드를 기준으로 노드를 찾는 방법을 공유하겠습니다. 많은 사람들이 실제 응용에서 바로 찾을 수 없는 노드가 있고, 근처 노드를 통해 상대적으로 위치를 찾아야 하는 문제를 겪습니다. 하지만 부모 노드에서 자식 노드를 찾는 것은 쉽지만, 자식 노드에서 부모 노드를 찾거나, 노드의 형제 노드를 찾는 것은 어려운 일입니다. 급하시면, 저는 점진적으로 설명해 드리겠습니다.
1. 부모에서 자식으로 찾기
가장 간단한 방법은 부모 노드에서 자식 노드를 찾는 것입니다. 우리는 많은 방법을 사용할 수 있으며, 다음 예제를 보겠습니다:
다음 코드를:
<html> <body> <div id="A"> <!--부모 노드에서 자식 노드 찾기--> <div id="B"> <div>부모에서 자식</div> </div> </div> </body> </html>
B 노드를 기준으로 id가 없는 자식 노드를 찾고자 하면, 다음과 같은 코드 예제를 참고하세요:
# -*- coding: utf-8 -*- from selenium import webdriver driver = webdriver.Firefox() driver.get('D:\\py\\AutoTestFramework\\src\\others\\test.html') # 1. 연결된 찾기 print driver.find_element_by_id('B').find_element_by_tag_name('div').text # 2.xpath 자식 관계 찾기 print driver.find_element_by_xpath("//div[@id='B']/div\ # 3.css selector 부모 자식 관계 찾기 print driver.find_element_by_css_selector('div#B>div').text # 4.css selector nth-child print driver.find_element_by_css_selector('div#B div:nth-child(1)').text # 5.css selector nth-of-type print driver.find_element_by_css_selector('div#B div:nth-of-type(1)').text # 6.xpath 축 child print driver.find_element_by_xpath("//div[@id='B']/child::div).text driver.quit()
결과:
parent to child
parent to child
parent to child
parent to child
parent to child
parent to child
까지1부터3이들 모두 우리가 잘 알고 있는 방법들입니다. 따라서 더 이상 설명하지 않겠습니다.4이 방법은 css 선택자 nth를 사용합니다.-child(n)을 사용하여 n번째 노드를 반환합니다. 이 노드는 div 태그입니다.5이 방법은 또 다른 css 선택자 nth child를 사용합니다.-of-type(n)을 사용하여 n번째 div 태그를 반환합니다. 이 선택자와 이전 선택자의 차이점을 주의하세요.6이 방법은 xpath 축 child를 사용합니다. 이것은 xpath 기본 축이며, 쓰지 않아도 됩니다. 실제로는 다음과 같은 방법과 같습니다.2같습니다.
물론, css에는 부모 자식 관계를 선택할 수 있는 선택자들도 몇 가지 있습니다. 예를 들어 last-child, nth-last-child 등, 관심이 있으면 자유롭게 구글링하세요. 기회가 되면博主가 css selector에 대해 설명할 것입니다.
2. 자식 점에서 부모 점을 찾는 방법
자식 점에서 부모 점을 찾는 방법에 대해 다음 코드를 참고하세요:
<html> <body> <div id="A"> <!--자식 점에서 부모 점을 찾는 것은 어려울 수 있습니다.--> <div> <div>child to parent <div> <div id="C"></div> </div> </div> </div> </div> </body> </html>
C 점에서 두 층 부모 점의 div를 찾고 싶다면 다음 예제 코드를 참고하세요:
# -*- coding: utf-8 -*- from selenium import webdriver driver = webdriver.Firefox() driver.get('D:\\py\\AutoTestFramework\\src\\others\\test.html') # 1.xpath: `.`은 현재 점을, '..'는 부모 점을 의미합니다 print driver.find_element_by_xpath("//div[@id='C']/../..).text # 2.xpath 축 parent print driver.find_element_by_xpath("//div[@id='C']/parent::*/parent::div).text driver.quit()
결과:
child to parent
child to parent
여기서 우리는 두 가지 방법이 있습니다.1두 번째는 .. 형식입니다. 우리가 알다시피, .은 현재 점을, ..는 부모 점을 의미합니다.2이 방법은 위와 같으며 xpath 축의 하나인 parent입니다. 현재 점의 부모 점을 가져옵니다. 이것도 css selector의 문제점 중 하나입니다. css의 설계는 부모 점을 가져올 수 있는 방법을 허용하지 않습니다. (적어도 현재까지는 그렇습니다).
3. 由弟弟节点定位哥哥节点
这是第3、第4种情况,我们这里要定位的是兄弟节点了。如以下源码:
<html> <body> <div id="A"> <!--下面两个节点用于兄弟节点定位--> <div>brother 1</div> <div id="D"></div> <div>brother 2</div> </div> </body> </html>
怎么通过 D节点 定位其哥哥节点呢?看代码示例:
# -*- coding: utf-8 -*- from selenium import webdriver driver = webdriver.Firefox() driver.get('D:\\Code\\py\\AutoTestFramework\\src\\others\\test.html') # 1.xpath,通过父节点获取其哥哥节点 print driver.find_element_by_xpath("//div[@id='D']/../div[1] # 2.xpath轴 preceding-sibling print driver.find_element_by_xpath("//div[@id='D']/preceding-sibling::div[1] driver.quit()
结果
형제 1
형제 1
这里博主也列举了两种方法,一种是通过该节点的父节点来获得哥哥节点,另外一种比较优雅,是通过 xpath轴:preceding-sibling,其能够获取当前节点的所有同级哥哥节点,注意括号里的标号,1 代表着离当前节点最近的一个哥哥节点,数字越大表示离当前节点越远,当然,xpath轴:preceding也可以,但是使用起来比较复杂,它获取到的是该节点之前的所有非祖先节点(这里不太好解释,改天专门写篇博文讲解下所有的轴)
4. 由哥哥节点定位弟弟节点
源码与 3 一致,要想通过 D节点 定位其弟弟节点,看代码示例:
# -*- coding: utf-8 -*- from selenium import webdriver driver = webdriver.Firefox() driver.get('D:\\Code\\py\\AutoTestFramework\\src\\others\\test.html') # 1.xpath,通过父节点获取其弟弟节点 print driver.find_element_by_xpath("//div[@id='D']/../div[3] # 2.xpath轴 following-sibling print driver.find_element_by_xpath("//div[@id='D']/following-sibling::div[1] # 3.xpath轴 following print driver.find_element_by_xpath("//div[@id='D']/following::*").text # 4.css selector + print driver.find_element_by_css_selector('div#D + div').text # 5.css selector ~ print driver.find_element_by_css_selector('div#D ~ div').text driver.quit()
결과:
형제 2
형제 2
형제 2
형제 2
형제 2
작성자는 형제 노드를 위치시키는 다섯 가지 방법을 공유했습니다. 중간 세 가지는 xpath를 사용합니다. 첫 번째는 이해하기 쉽습니다.-sibling과 preceding-sibling과 유사하게, 현재 노드의 모든 동급 형제 노드를 가져오는 역할을 합니다. 마찬가지로,1 현재 노드에서 가장 가까운 형제 노드를 나타냅니다. 숫자가 클수록 현재 노드에서 멀어집니다. 세 번째는 xpath 축 following을 사용합니다. 이 축은 현재 노드 이후 모든 노드를 가져옵니다. (preceding 방향과는 반대로, 하지만 아래로의 순서가 쉬우며, 오류가 쉽지 않기 때문에 이를 형제 노드로 사용할 수도 있지만, 권장하지 않습니다); 네 번째와 다섯 번째는 css selector를 사용합니다.+ 와 ~의 차이는: + 현재 노드 뒤에 오는 div 노드를 나타냅니다., ~는 현재 노드 뒤에 오는 div 노드를 나타냅니다. find_elements를 사용하면 div 노드 집합을 가져올 수 있습니다.
위 내용은 편집자가 여러분에게 소개한 Python selenium 부모, 형제, 이웃 노드 위치 방식 전체 설명입니다. 여러분의 도움이 되길 바랍니다. 어떤 질문이든 저에게 댓글을 남겨 주시면, 편집자는 즉시 답변을 드리겠습니다. 또한, 여러분의呐喊 가이드 사이트에 대한 지원에 깊이 감사드립니다!
명시: 본 문서의 내용은 인터넷에서 수집되었으며, 저작권자는 모두 소유합니다. 내용은 인터넷 사용자가 자발적으로 기여하고 업로드한 것이며, 이 사이트는 소유권을 가지지 않으며, 인공編集 처리를 하지 않았으며, 관련 법적 책임도 부담하지 않습니다. 저작권 침해가 의심되는 내용이 발견되면, notice#w로 이메일을 보내 주시기 바랍니다.3codebox.com에 (메일 보내는 경우 #을 @으로 변경하십시오) 신고하시고 관련 증거를 제공하시면, 사이트는 즉시 저작권 침해 의심 내용을 삭제할 것입니다.