2017-12-21 36 views
0

파이썬 코드는 HTML의 첫 번째 기사 만 찾기 때문에 동일한 링크를 인쇄하고 있습니다. HTML에서 모든 기사 태그를 얻으려면 어떻게해야합니까? 감사.Selenium을 사용하여 웹 페이지에서 모든 요소를 ​​가져 오는 방법은 무엇입니까?

파이썬 코드 :

links = driver.find_elements_by_tag_name("article") 
for i in links: 
    if driver.find_element_by_xpath("//div[@class='inner-article']/a//div[@class='sold_out_tag']").get_attribute("innerHTML") == "sold out": 
     print("sold out") 
     link = ((driver.find_element_by_xpath("//div[@class='inner-article']/a").get_attribute("href"))) 
     print(link) 
    else: 
     print("available") 
time.sleep(5) 
driver.quit() 

HTML :

<article> 
    <div class="inner-article"><a style="height:81px;" 
    href="/shop/jackets/jly8dgwqu/w10m2pybx"><img width="81" height="81" 
    src="//d17ol771963kd3.cloudfront.net/139432/vi/AHP1l8fMIcA.jpg" 
    alt="Ahp1l8fmica"><div class="sold_out_tag">sold out</div></a></div> 
</article> 
<article> 
    <div class="inner-article"><a style="height:81px;" 
    href="/shop/jackets/jly8dgwqu/w10m2pybx"><img width="81" height="81" 
    src="//d17ol771963kd3.cloudfront.net/139432/vi/AHP1l8fMIcA.jpg" 
    alt="Ahp1l8fmica"><div class="sold_out_tag">sold out</div></a></div> 
</article> 
+0

을 html, "결과는 정확히 무엇입니까? – JacobIRR

+0

코드를 실행할 때 일어난 일을 자세히 지정할 수 있습니까? 그리고 HTML에서 모든 기사 태그를 가져 오지 못하게하는 것은 무엇입니까? –

+0

문제는 if 문 안에서 * driver *에서'find_element' 코드를 호출하는 것입니다. 'i'에서 호출하고 이에 따라 XPath를 수정해야합니다. – Mangohero1

답변

2

이렇게하려면, 당신은 셀레늄에 의해 특별 기동이 Action Chains라고해야합니다. 당신과 같이 상단에 가져올 수 있습니다 :

각 기사 웹 요소에 대해
articles = driver.find_elements_by_tag_name('article') 
for article in articles: 
    ActionChains(driver).move_to_element(article).perform() 
    if article.find_element_by_tag_name('a').text == "sold out": 
     print("sold out") 
     link = article.find_element_by_xpath('div/a').get_attribute('href') 
     print(link) 
    else: 
     print("available") 

, 당신은 단지 해당 요소에서 찾기 위해 driver에서 같은 메서드를 호출 할 수 있습니다 : 다음과 같이

from selenium.webdriver.common.action_chains import ActionChains 

그런 다음 진행 . XPath의 이중 슬래시 (//)는 특정 요소를 고려하지 않고 전체 DOM을 검색하도록 지시하므로 (즉, 동일한 요소를 찾을 때마다) 동일한 요소를 검색해야합니다 (즉, /).

편집 : 매진 텍스트가있는 요소의 CSS 속성은 display: none;입니다. 매진 텍스트를 트리거하는 유일한 방법은 각 요소를 마우스 오버하는 것입니다. 다행히 Selenium도이 기능을 제공합니다. 나는 원래 코드를 약간 변경했는데 매진되지 않은 항목에는 "매진 태그"클래스가있는 div가 없으므로 오류가 발생합니다. 당으로

+0

실제로 동일한 결과가 나타났습니다. 이유는 확실하지 않습니다. –

+0

흠. 압축을 풀고있는 페이지의 링크를 보내주세요. 내 마지막에 뭔가 있는지 확인해 보겠습니다. – Mangohero1

+0

http://www.supremenewyork.com/shop/all 도움에 감사합니다. –

0

HTML 텍스트 sold out와 노드의 href의를 인쇄 할 경우이 공유 한 다음 코드 블록을 사용할 수 있습니다 : 당신은 단지의 첫 번째 기사를 찾아 "말할 때

links = driver.find_elements_by_tag_name("article") 
for i in links: 
    if "sold out" in i.find_elements_by_xpath("//div[@class='inner-article']/a//div[@class='sold_out_tag']").get_attribute("innerHTML") : 
     print("sold out") 
     print(i.find_element_by_xpath("//div[@class='inner-article']/a").get_attribute("href"))